Correspondência recursiva com expressões regulares em Javascript

Exemplo de string: $${a},{s$${d}$$}$$

Gostaria de combinar primeiro $${d}$$ e substituí-lo por algum texto, para que a string se tornasse $${a},{sd}$$ , em seguida, $${a},{sd}$$ coincide.

Irritantemente, o Javascript não fornece o parâmetro recursivo PCRE (?R) , portanto, está longe de ser fácil lidar com o problema nested. Isso pode ser feito no entanto.

Não vou reproduzir código, mas se você der uma olhada no blog de Steve Levithan , ele tem alguns bons artigos sobre o assunto. Ele deve fazer, ele é provavelmente a principal autoridade no RegExp em JS. Ele escreveu XRegExp , que substitui a maioria dos bits PCRE que estão faltando, existe até um plugin Match Recursive !

Como você quer fazer isso de forma recursiva, provavelmente é melhor fazer várias correspondências usando um loop.

O próprio Regex não é adequado para qualquer coisa recursiva.

Em geral, Regexps não são adequados para esse tipo de problema. É melhor usar a máquina de estado.

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

Eu mesmo escrevi isso:

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

Uso:

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

PS: Como sugerido por @ededje, ao usar essa function na produção, é bom ter um contador limitador para evitar o estouro de pilha.