Что не так с моим регулярным выражением Javascript? - PullRequest
1 голос
/ 23 августа 2010

Я бы хотел, чтобы регулярное выражение совпадало тогда и только тогда, когда строка отсутствует , семья или работа (но не моя семья например).

Почему следующий код приводит к "match"? Почему ^ и $ не работают?

var regex = new RegExp("^none|family|work$");
var str = "my family";
document.write(regex.test(str) ? "match" : "no");

Ответы [ 2 ]

4 голосов
/ 23 августа 2010

Ваше регулярное выражение соответствует либо :

  • «нет» в начале строки;
  • «семья» в любом месте строки; или
  • «работа» в конце строки.

Вместо этого вы, вероятно, хотите

var regex = new RegExp("^(none|family|work)$");
4 голосов
/ 23 августа 2010

Оператор | имеет низкий приоритет, поэтому у вас фактически есть (^none)|(family)|(work$), который соответствует любому, начинающемуся с none, содержащему family или заканчивающемуся work.

Используйте это вместо:

^(none|family|work)$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...