我在关联数组中有几个字符串:
var arr = {
'============================================': '---------',
'++++++++++++++++++++++++++++++++++++++++++++': '---------',
'--------------------------------------------': '---------'
};
我想用相应的值替换每个键的出现。我想出的是:
for (var i in arr)
{
strX = str.replace(i, arr[i]);
console.log('arr[\''+i+'\'] is ' + arr[i] + ': ' + strX);
}
这有效,但仅在第一次出现时有效。如果我将正则表达式更改为
/i/g
,则该代码不起作用。for (var i in arr)
{
strX = str.replace(/i/g, arr[i]);
console.log('arr[\''+i+'\'] is ' + arr[i] + ': ' + strX);
}
你们知道如何解决这个问题吗?
最佳答案
代替
strX = str.replace(/i/g, arr[i]);
您想做类似的事情。
strX = str.replace(new RegExp(i, "g"), arr[i]);
这是因为
/i/g
指向字母i,而不是变量i
的值。 但是,您的基本字符串之一带有加号,它是正则表达式中的元字符。这些必须逃脱。最快的破解方法如下:new RegExp(i.replace(/\+/g, "\\+"), "g"), arr[i]);
这是一个工作示例:http://jsfiddle.net/mFj2f/
我认为,总的来说,应该检查所有的元字符。