JavaScript正则表达式:用于匹配名字的第一个单词

3

我正在寻找一个正则表达式,满足以下条件:

  • 最少1个字符,最多50个字符
  • 开头和结尾不能有空格
  • 只允许在两个单词之间有一个空格或者点。

我使用下面的表达式会导致灾难性回溯问题。

表达式 -
/^[a-zA-Z]+(?:(?:|['_\. ])([a-zA-Z]*(\.\s)?[a-zA-Z])+)*$/

我该如何避免这个问题?

1
尝试使用正则表达式/^(?=.{1,50}$)[a-z]+(?:['_.\s][a-z]+)*$/i - Wiktor Stribiżew
我更新了我的问题,模式中会有下划线。 - Rashmi Narware
最好有一组测试字符串。请在https://regex101.com/r/TmJTBD/3上尝试它们。 - Wiktor Stribiżew
/^(?=.{1,50}$)[a-z]+(?:['_.\s][a-z]+)*$/i。这对我很有效。非常感谢你。 - Rashmi Narware
1个回答

9

您可以使用

/^(?=.{1,50}$)[a-z]+(?:['_.\s][a-z]+)*$/i

请查看正则表达式演示

详细信息

  • ^ - 字符串的开始
  • (?=.{1,50}$) - 字符串中必须有1到50个字符
  • [a-z]+ - 1个或多个ASCII字母
  • (?:['_.\s][a-z]+)* - 0个或多个序列
    • ['_.\s] - '_.或空格
    • [a-z]+ - 1个或多个ASCII字母
  • $ - 字符串的结尾
  • /i - 不区分大小写的修饰符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接