var content = "your string content";
var found = true;
while (found) {
found = false;
content = content.replace(/regex/, () => { found = true; return "new value"; });
}
var re = new RegExp(/\$\${([^\$]*)}\$\$/, 'g'),
original = '$${a},{s$${d}$$}$$',
result = original.replace(re, "$1");
console.log('original: ' + original)
console.log('result: ' + result);
6条答案
按热度按时间ymdaylpp1#
令人烦恼的是,JavaScript没有提供PCRE递归参数
(?R)
,因此处理嵌套问题远非易事。不过,这是可以做到的。我不会复制代码,但如果你看看Steve Levithan's blog,他有一些关于这个主题的好文章。他应该这样做,他可能是JavaScript中正则表达式的主要权威。他写了XRegExp,它取代了大部分缺失的PCRE位,甚至还有一个Match Recursive插件!
h22fl7wq2#
我自己写的:
使用方法:
P.S:正如lededje所建议的,在生产环境中使用此函数时,最好有一个限制计数器以避免堆栈溢出。
gblwokeq3#
由于您希望递归地完成此操作,因此最好使用循环执行多个匹配。
正则表达式本身并不适合递归。
ktca8awb4#
kq4fsx7k5#
你可以试试
\$\${([^\$]*)}\$\$
。[^\$]
表示如果捕获的组包含$
,则不捕获。qkf9rpyu6#
一般来说,正则表达式不太适合解决这类问题。最好使用状态机。