我有一个姓名列表,我希望过滤该列表以仅返回包含姓氏和名字的姓名。
假设我正在寻找“Joe Doe”
我有当前的正则表达式 (?:^|\s)Joe|(?:^|\s)Doe
它有点工作,但它返回包含 Joe 或 Doe 的所有字符串。我希望它匹配只包含两个名字的名字,它可以是“Doe Joe”或“Joe Doe”
最佳答案
这个基于前瞻的正则表达式应该可以工作:
/(?=.*?\bJoe\b)(?=.*?\bDoe\b).*/i
测试:
/(?=.*?\bJoe\b)(?=.*?\bDoe\b).*/.test('Joe Doe'); // true
/(?=.*?\bJoe\b)(?=.*?\bDoe\b).*/.test('Doe Joe'); // true