Подтвердить что ты не робот

Рекурсивное совпадение с регулярными выражениями в Javascript

Пример строки: $${a},{s$${d}$$}$$

Сначала я хотел бы совместить $${d}$$ и заменить его на некоторый текст, чтобы строка стала $${a},{sd}$$, а затем будет $${a},{sd}$$.

4b9b3361

Ответ 1

Раздражающе, Javascript не предоставляет рекурсивный параметр PCRE (?R), поэтому далеко не просто справиться с вложенной проблемой. Однако это можно сделать.

Я не буду воспроизводить код, но если вы посмотрите блог Стив Левитана, у него есть хорошие статьи по этому вопросу. Он должен это сделать, он, вероятно, является ведущим авторитетом в RegExp в JS. Он написал XRegExp, который заменяет большинство битов PCRE, которые отсутствуют, есть даже Match Recursive плагин!

Ответ 2

Поскольку вы хотите сделать это рекурсивно, вам, вероятно, лучше всего делать несколько совпадений с помощью цикла.

Само Regex не подходит для рекурсивного-ничего.

Ответ 3

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

Ответ 4

Я сам написал это:

String.prototype.replacerec = function (pattern, what) {
    var newstr = this.replace(pattern, what);
    if (newstr == this)
        return newstr;
    return newstr.replace(pattern, what);
};

Использование:

"My text".replacerec(/pattern/g,"what");

Ответ 5

var content = "your string content";
var found = true;
while (found) {
    found = false;
    content = content.replace(/regex/, () => { found = true; return "new value"; });
}