4

名前のリストがあり、姓と名の両方を含む名前のみを返すようにリストをフィルタリングしようとしています。

「Joe Doe」を探しているとしましょう

私は現在の正規表現を持っています(?:^|\s)Joe|(?:^|\s)Doe

ある程度は機能しますが、Joe または Doe のいずれかを含むすべての文字列を返しています。両方の名前のみを含む名前に一致させたいのですが、「Doe Joe」または「Joe Doe」のいずれかになります。

4

1 に答える 1

7

この先読みベースの正規表現は機能するはずです。

/(?=.*?\bJoe\b)(?=.*?\bDoe\b).*/i

テスト:

/(?=.*?\bJoe\b)(?=.*?\bDoe\b).*/.test('Joe Doe'); // true
/(?=.*?\bJoe\b)(?=.*?\bDoe\b).*/.test('Doe Joe'); // true
于 2013-10-16T19:52:57.763 に答える