Ответ 1
Ваш RegEx работает нормально. Проблема заключается в интерпретации вывода.
-
Чтобы получить несколько совпадений RegEx, вы должны сделать что-то вроде этого
var regEx = /not(?:this|that)(.*?)end/ig; var data = "notthis123end notthat45end"; var match = regEx.exec(data); while(match !== null) { console.log(match[1]); match = regEx.exec(data); }
Примечание. Важно хранить RegEx в переменной, подобной этой, и использовать цикл с этим. Поскольку для получения множественных совпадений реализация JavaScript RegEx сохраняет текущий индекс совпадения в самом объекте RegEx. Итак, в следующий раз
exec
называется, он поднимается с того места, где он находился. Если мы используем литерал RegEx как есть, то мы закончим бесконечный цикл, так как он будет начинаться с начала всегда. -
Результат метода
exec
должен интерпретироваться так: первое значение - это полное совпадение, а следующий элемент мы получаем группы внутри матчей. В этом RegEx у нас есть только одна группа. Итак, мы получаем доступ к этому с помощьюmatch[1]
.