根据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吗?
答案 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