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"
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"
Share Improve this question asked Oct 16, 2013 at 19:47 NewtonNewton 2451 gold badge5 silver badges11 bronze badges 2- is your first name and last name always separated by whitespace? – Rohit Jain Commented Oct 16, 2013 at 19:49
- Not always, there are cases where I have hyphenated names – Newton Commented Oct 16, 2013 at 19:51
1 Answer
Reset to default 8This 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