我正在尝试为名称编写一个 RegEx。姓名可以选择以头衔开头(Dr.、Mrs. 等),或者包含两个或三个姓名,中间名可选择缩写为 (X.)

例如,应匹配以下名称:

  • 杰夫·T·沃克博士
  • 苏珊 B. 安东尼
  • Michael Binghamton 先生
  • 乔治·布什夫人

  • 以下不应该匹配
  • 加菲猫
  • J
  • 博士
  • T. 疼痛
  • 美国
  • 2020 年 2 月 15 日

    这是我所拥有的:
    ^(Dr\.|Mr\.|Mrs\.)?[A-Z][a-z]+\s([A-Z][a-z]+|[A-Z]\.)\s[A-Z][a-z]+?
    

    我不太确定我哪里出错了。

    最佳答案

    ^((Dr|Mr|Mrs)\. )?[A-Z][a-z]+( [A-Z]([a-z]+|\.))? [A-Z][a-z]+
    这是我为修复它所做的:

  • 在前缀后添加一个空格 - 之前,您匹配的是“Dr.James”,而不是“Dr. James”
  • 删除最后的问号,在姓氏之后 - 如果不在括号之后,? 结果为“lazy matching ” - 匹配尽可能少的字符(在本例中为 1)
  • 将中间名设为可选
  • 删除了一些冗余(例如前缀和中间名)
  • 用空格替换了 \s - 更容易阅读,\s 匹配制表符、换行符等。
  • 关于javascript 名称正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15232348/

    10-13 01:11