自定义 Javascript 正则表达式 - 无法使其工作

Custom Javascript Regex - Cannot make it work

我需要接受以下内容:

我的正则表达式不工作...

/^([a-z]{1}\.[a-z]{1,40}|[a-z]{1}\.[a-z]{1,40}\-[a-z]{1,40}|[a-z\s]{1,})$/i

同时

/^([a-z]{1}\.[a-z]{1,40}|[a-z]{1}\.[a-z]{1,40}\-[a-z]{1,40})$/i

单独工作正常并且

/^([a-z\s]{1,})$/i

工作正常...

我做错了什么? 提前谢谢你...

您可以将模式写为:

^(?:(?:[a-z]\.)?[a-z]{1,40}(?:-[a-z]{1,40})?|[a-z]+(?:\s+[a-z]+)+)$
  • ^ 字符串开头
  • (?:非捕获组
    • (?:[a-z]\.)? 匹配一个可选的字符 a-z 和一个点
    • [a-z]{1,40} 匹配 1-40 个字符
    • (?:-[a-z]{1,40})? 匹配连字符和 1-40 个字符的可选部分
    • |
    • [a-z]+(?:\s+[a-z]+)+ 匹配 2 个或更多单词,它们之间有空格
  • )关闭非捕获组
  • $ 字符串结束

看到一个regex101 demo

您可以尝试使用以下正则表达式:

^(([a-z]\.)?[a-z]{1,40}(-[a-z]{1,40})?|[a-z]+( [a-z]+)+)$

此解决方案使用两种模式:

  • 第一个匹配您的前四个样本:
    • 可选第一组:[a-z]{1}\.
    • 强制第二组:[a-z]{1,40}
    • 可选第三组:-[a-z]{1,40}
  • 第二个与您的最后一个样本匹配:
    • 由字符分隔的单词:[a-z]+( [a-z]+)+)

这些组将单独突出显示。

详细说明:

  • ^: 字符串开始
  • ([a-z]\.)?:一个字母字符+点(可选组)
  • [a-z]{1,40}:1 到 40 个字母字符
  • (-[a-z]{1,40})?:破折号 + 1 到 40 个字母字符(可选组)
  • [a-z]+: 字母字符组合
  • ( [a-z]+)+:多个
  • $: 字符串结束

试试看 here.