我正在尝试为名称编写正则表达式。名字可以选择以头衔开头(博士、夫人等),或者包含两个或三个名字,中间名可以选择以 (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/