Тест регулярного выражения не может выбрать между истинным и ложным (JavaScript) - PullRequest
4 голосов
/ 19 апреля 2010

Я получаю такое поведение как в Chrome (Инструменты разработчика), так и в Firefox (Firebug). Обратите внимание, что тест регулярного выражения возвращает чередующиеся значения true / false:

> var re = /.*?\bbl.*\bgr.*/gi;
undefined
> re
/.*?\\bbl.*\\bgr.*/gi
> re.test("Blue-Green");
true
> re.test("Blue-Green");
false
> re.test("Blue-Green");
true
> re.test("Blue-Green");
false

Тем не менее, тестирование того же регулярного выражения, что и литерала:

> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true
> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true
> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true
> /.*?\bbl.*\bgr.*/gi.test("Blue-Green");
true

Я не могу объяснить это, и это делает отладку очень сложной. Кто-нибудь может объяснить это поведение?

1 Ответ

9 голосов
/ 19 апреля 2010

/g (global) регулярные выражения сделают это, да.

См. этот вопрос .

Когда вы пишете литерал, вы каждый раз получаете новый объект регулярного выражения, поэтому теряется состояние lastIndex, связанное со старым объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...