I need regex which will run on site containing both words at the same time. For example www.boots.com/**sport**/**nike** I've found in in other question something like:
^(?=.*\bnike\b)(?=.*\bsport\b).*$
Would this be correct? First word is a category so it goes between "/" chars, second word is a product name so it might appear between "-" chars.
CodePudding user response:
\b
is a word boundary and matches in many more contexts than you expect. You need to restrict the context and thus you can use
^(?=.*(?:/|^)sport(?:/|$))(?=.*(?:[/-]|^)nike(?:[/-]|$)).*
Here,
(?=.*(?:/|^)sport(?:/|$))
- the string must containsport
at the start or immediately after/
and at the end of the string or immediately followed with a/
char(?=.*(?:[/-]|^)nike(?:[/-]|$))
- the string must containnike
at the start or immediately after/
or-
and at the end of the string or immediately followed with a/
or-
chars.
Note you do not need $
here (that matches the end of string) as .
matches any chars other than line break chars.