JavaScript 名称正则表达式

标签 javascript regex

我正在尝试为名称编写正则表达式。名字可以选择以头衔开头(博士、夫人等),或者包含两个或三个名字,中间名可以选择以 (X.) 形式缩写

例如,应匹配以下名称:

  • 博士杰夫·T·沃克
  • 苏珊·安东尼
  • 先生迈克尔·宾厄姆顿
  • 夫人乔治·布什

以下不应匹配

  • 加菲猫
  • 博士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/

相关文章:

javascript - 如何显示模板而不将其显示在布局模板内?

javascript - ES 2017 : async function vs AsyncFunction(object) vs async function expression

Python 正则表达式与其他正则表达式工具所匹配的不匹配

regex - 如何从 Perl 中的逗号分隔值中提取值?

javascript - 将函数链接到要打印的字符串

javascript - 循环 Fetch_API 似乎对我不起作用

javascript - 使用空格时输入过滤器嵌套div

PHP preg_match yyyy-mm-dd

regex - 从字符串中提取版本号,最佳方法?

regex - sed 从行尾删除字符模式?