为什么我有这个结果?
"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
答案 0 :(得分:3)
您正在滥用compile
method。
警告:
compile
方法已弃用,您不应该使用它。改为创建一个新的RegExp
对象。
它的原型读取:
regexObj.compile(pattern, flags)
所以你必须传递一个新模式来替换实例的模式。
在IE下,调用compile()
会产生正则表达式/(?:)/
,这是一个空的正则表达式,匹配"hello world"
开头的空字符串。也没有g
标记,因此您最终会在字符串前加\'
。
在Chrome下,compile()
返回undefined
,因此无法替换。