Javascript - 奇怪的正则表达式行为

时间:2014-10-18 14:56:03

标签: javascript regex string

所以这是我的代码:

var str = "eee";

console.log(str.replace(/ee/g, "e*e"));

在控制台中,结果为:

> "e*ee"

应该是:

> "e*e*e"

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 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的答案。