javascript名称正则表达式

时间:2013-03-05 19:22:29

标签: javascript regex

我正在尝试为名称编写RegEx。名称可以选择以标题(博士,夫人等)开头,否则包含两个或三个名称,中间名称可选择缩写形式(X。)

例如,应匹配以下名称:

  • 博士。杰夫T.沃克
  • Susan B. Anthony
  • 先生。 Michael Binghamton
  • MRS。乔治布什

以下内容不应匹配

  • 加菲尔德
  • 博士。 Ĵ
  • 吨。疼痛
  • 美利坚合众国
  • 2020年2月15日

这就是我所拥有的:

^(Dr\.|Mr\.|Mrs\.)?[A-Z][a-z]+\s([A-Z][a-z]+|[A-Z]\.)\s[A-Z][a-z]+?
我不太确定我在哪里出错了。

1 个答案:

答案 0 :(得分:3)

^((Dr|Mr|Mrs)\. )?[A-Z][a-z]+( [A-Z]([a-z]+|\.))? [A-Z][a-z]+

这就是我为解决这个问题而采取的措施:

  • 在前缀后添加了一个空格 - 之前,你匹配的是“Dr.James”,而不是“Dr. James”
  • 在姓氏后面的末尾删除了问号 - 如果没有在括号后面,?会产生“lazy matching” - 匹配尽可能少的字符(在这种情况下,1)< / LI>
  • 使中间名可选
  • 删除了一些冗余(例如在前缀和中间名称中)
  • 用空格替换\s - 它更容易阅读,\ s匹配制表符,换行符等。