RegExp.exec не возвращает глобальные результаты - PullRequest
1 голос
/ 13 октября 2010

Согласно MDC https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/RegExp/exec следующий код должен регистрировать каждое из глобальных совпадений для этого регулярного выражения.

var str = "(^|\\+)(1\\+1)($|\\+)";
var regex = new RegExp(str, "g");
var result;
var testString = "1+1+1";
while ((result = regex.exec(testString)) != null)
{
    console.log(result);
}

Но все, что я получаю, это первое совпадение, а затем цикл завершается.Есть идеи почему.

Ответы [ 2 ]

0 голосов
/ 13 октября 2010

Ваше регулярное выражение не будет соответствовать этой строке более одного раза, поскольку совпадения не могут перекрываться.У вас есть другая примерная строка, которую вы пытаетесь сопоставить, или более подробная информация о том, что вам нужно из этой строки?

В любом случае, я бы вместо этого использовал литерал объекта RegExp;меньше экранирования, и вы можете указать глобальный флаг напрямую.

var regex = /(^|\+)(1\+1)($|\+)/g;
0 голосов
/ 13 октября 2010

Есть только одно совпадение, поскольку перекрытие не допускается.Совпадение:

(^|\\+) - ^

(1\\+1) - 1+1

($|\\+) - +

Должно быть ясно, что не может быть другого совпадения, поскольку для каждого совпадения требуется не менее 1+1, и остается только один 1.В качестве отдельного примечания, использование литерала регулярных выражений проще:

var regex = /(^|\+)(1\+1)($|\+)/g;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...