示例字符串:$${a},{s$${d}$$}$$
我想首先匹配$${d}$$
并将其替换为一些文字,以便字符串变为$${a},{sd}$$
,然后匹配$${a},{sd}$$
。
答案 0 :(得分:28)
令人讨厌的是,Javascript没有提供PCRE递归参数(?R)
,因此处理嵌套问题并不容易。但是可以这样做。
我不会重现代码,但是如果你查看Steve Levithan's blog,他就这个主题有一些很好的文章。他应该这样做,他可能是JS中RegExp的主要权威。他写了XRegExp,它取代了大多数缺少的PCRE位,甚至还有一个Match Recursive插件!
答案 1 :(得分:2)
我自己写了这个:
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");
P.S:正如@lededje所建议的那样,在生产中使用这个功能时,最好有一个限制计数器以避免堆栈溢出。
答案 2 :(得分:0)
由于您希望以递归方式执行此操作,因此最好使用循环执行多个匹配。
正则表达式本身并不适合递归任何东西。
答案 3 :(得分:0)
var content = "your string content";
var found = true;
while (found) {
found = false;
content = content.replace(/regex/, () => { found = true; return "new value"; });
}
答案 4 :(得分:0)
您可以尝试const activities_list = [
"Hey",
"What's up?",
"do !help",
"contact the developer to report any bug"
]; // creates an arraylist containing phrases you want your bot to switch through.
client.on('ready', () => {
setInterval(() => {
const index = Math.floor(Math.random() * (activities_list.length - 1) + 1); // generates a random number between 1 and the length of the activities array list (in this case 5).
client.user.setActivity(activities_list[index]); // sets bot's activities to one of the phrases in the arraylist.
}, 10000); // Runs this every 10 seconds.
});
,如果捕获的组包含\$\${([^\$]*)}\$\$
,则[^\$]
表示不捕获
$
答案 5 :(得分:-2)
通常,Regexp不适合这类问题。最好使用状态机。