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