所以这是我的代码:
var str = "eee";
console.log(str.replace(/ee/g, "e*e"));
在控制台中,结果为:
> "e*ee"
应该是:
> "e*e*e"
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:5)
由于匹配重叠,您需要使用正向前瞻。
> var str = "eee";
undefined
> console.log(str.replace(/e(?=e)/g, "e*"));
e*e*e
e(?=e)
,这个使用正向前瞻的正则表达式只有在e
之后才匹配字母e
。用e
替换所有匹配的e*
将为您提供所需的输出。
答案 1 :(得分:3)
匹配"消费"字符。匹配前两个e
字符后,只剩下一个e
字符。
您可以重复尝试替换,直到字符串的长度停止变化,或者(更好)使用前瞻性,如Avinash Raj的答案。