RegEx идеально соответствует, но пропускает совпадения при заменеJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Гость
 RegEx идеально соответствует, но пропускает совпадения при замене

Сообщение Гость »


У меня есть текст, содержащий заполнители, например %%%NAME.suffix|DefaultValue%%%.

Следующее регулярное выражение идеально соответствует ему (см. ссылку): %{3}((\w+)(?:\.(\w+))?)(?:\|([\s\S ]*?))?%{3}

Но он пропускает совпадения, когда я заменяю их одно за другим в JavaScript (ES5, то же самое в ES6 или более поздних версиях) с помощью цикла while.

Я не использую шаблон RexEx в String.replace(/a/gm, "b"), а простую строку String.replace("%%%NAME.suffix|DefaultValue%%%", "DefaultValue").

var суп = "%%%X.x|a%%% %%%Y.y|b%%% %%%Z.z|c%%%"; вар м; while ((m = regex.exec(суп)) !== null) { // Это необходимо, чтобы избежать бесконечных циклов с совпадениями нулевой ширины. if (m.index === regex.lastIndex) { регулярное выражение.lastIndex++; } console.log(m[2] + " найдено: " + JSON.stringify(m, null, 2)); суп = суп.replace(m[0], m[4]); } Результат: заполнитель Y пропущен. Почему?

Выход:

X найден: [ "%%%X.x|a%%%", "X.x", "X", "x", "a" ] Z найден: [ "%%%Z.z|c%%%", "Z.z", "Z", "z", "c" ] Также см. полный код здесь: https://runjs.co/s/IcNbKwSCu
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»