为什么javascript不能取代Chrome或IE中的全局标志,以及如何解决它?

时间:2011-02-13 00:01:09

标签: javascript google-chrome

根据String.prototype.replace() page on MDN,我应该可以通过使用

轻松替换多个模式
str.replace('what to replace', 'replace with', 'flags')

并将标志设置为'g'

它在Firefox 3.6中运行良好。但在Chrome和IE8中,它只替换了第一个'what to replace'

我可以使用

str.replace(/what to replace/gi, 'replace with')

语法。但是我将'what to replace'从数组中拉出来,这使得很难在该语法中添加标志。

这是我正在尝试使用的代码。如何修改它以在Chrome和Firefox中使用?

function generateQuestion()
{
    //alert('variable length: '+variableList.length);
    for(i=0;i<variableList.length;i++)
    {
        variable = variableList[i];
        rep = replacementList[i];
        flags = "gi";
        questionText = questionText.replace(variable, rep, flags);
    }
}

为什么我要打扰它呢? Chrome不应该按照链接中的说明评估JavaScript吗?

3 个答案:

答案 0 :(得分:27)

您关联的页面提及:

  

String.replace方法中flags参数的使用是非标准的。对于跨浏览器兼容性,请使用带有相应标志的RegExp对象。

基本上,它应该只适用于Firefox。根据文档,您可以使用new RegExp动态生成正则表达式:

var regex = new RegExp(variable, 'gi');
questionText = questionText.replace(regex, rep);

但是,这需要转义variable

答案 1 :(得分:4)

似乎webkit的string.replace实现可能没有第3个参数,因为'foo'.replace('o','i','g')对我来说会产生fio

以下似乎有效:

'foo'.replace(/o/gi,'i')

另一种选择是:

'foo'.replace(new RegExp('o', 'gi'),'i')

答案 2 :(得分:0)

来自Mozilla Developer Network - JavaScript - String - replace

<强>非标准

String.replace方法中flags参数的使用是非标准的。对于跨浏览器兼容性,请使用带有相应标志的RegExp对象。

在Chrome和Firefox中工作

要让您的代码在Chrome和Firefox中运行,您必须使用适当的标志创建一个RegExp对象(因为您的字符串不是硬编码的)。见Mozilla Developer Network - RegExp