Рекурсивное совпадение с регулярными выражениями в Javascript
Пример строки: $${a},{s$${d}$$}$$
Сначала я хотел бы совместить $${d}$$ и заменить его на некоторый текст, чтобы строка стала $${a},{sd}$$, а затем будет $${a},{sd}$$.
Ответ 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"; });
}