I would like regex to match if and only if the string is none, family or work (but not my family开发者_运维知识库, for example).
Why the following code results with "match" ? Why ^ and $ do not work ?
var regex = new RegExp("^none|family|work$");
var str = "my family";
document.write(regex.test(str) ? "match" : "no");
The |
operator has low precedence, so you effectively have (^none)|(family)|(work$)
, which matches anything beginning with none
, containing family
or ending with work
.
Use this instead:
^(none|family|work)$
Your regex matches either:
- “none” at the beginning of the string;
- “family” anywhere in the string; or
- “work” at the end of the string.
What you probably want instead is
var regex = new RegExp("^(none|family|work)$");
精彩评论