admin管理员组

文章数量:1431904

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
Add a ment  | 

1 Answer 1

Reset to default 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

本文标签: javascriptRegexmatch multiple unordered words in a stringStack Overflow