字符串替换为正则表达式,即奇怪的结果

时间:2015-06-18 16:14:13

标签: javascript regex google-chrome internet-explorer

为什么我有这个结果?

"hello world".replace(/[']/gi, "\\'"); // on chrome => "hello world"
"hello world".replace(/[']/gi, "\\'"); // on ie => "hello world"

"hello world".replace((/[']/gi).compile(), "\\'"); // on chrome => "hello world"
"hello world".replace((/[']/gi).compile(), "\\'"); // on ie => "\'hello world"

Chrome:43.0.2357.124 m

IE:11.0.10011.0

1 个答案:

答案 0 :(得分:3)

您正在滥用compile method

  

警告compile方法已弃用,您不应该使用它。改为创建一个新的RegExp对象。

它的原型读取:

regexObj.compile(pattern, flags)

所以你必须传递一个新模式来替换实例的模式。

  • 在IE下,调用compile()会产生正则表达式/(?:)/,这是一个空的正则表达式,匹配"hello world"开头的空字符串。也没有g标记,因此您最终会在字符串前加\'

  • 在Chrome下,compile()返回undefined,因此无法替换。