4

I have a list of names and I am looking to filter the list to only return names that contains both the last and first names.

Let's say I am looking for "Joe Doe"

I have the current regex (?:^|\s)Joe|(?:^|\s)Doe

It somewhat works but it is returning all the strings that contains either Joe or Doe. I would like it to match the names that contains both names only, and it could be either "Doe Joe" or "Joe Doe"

Newton
  • 245
  • 1
  • 5
  • 11

1 Answers1

8

This lookahead based regex should work:

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

Testing:

/(?=.*?\bJoe\b)(?=.*?\bDoe\b).*/.test('Joe Doe'); // true
/(?=.*?\bJoe\b)(?=.*?\bDoe\b).*/.test('Doe Joe'); // true
anubhava
  • 761,203
  • 64
  • 569
  • 643