我在关联数组中有几个字符串:
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);
}
你们知道如何解决这个问题吗?
答案 0 :(得分:7)
而不是
strX = str.replace(/i/g, arr[i]);
你想做点什么。
strX = str.replace(new RegExp(i, "g"), arr[i]);
这是因为/i/g
指的是字母i,而不是变量i
的值。 HOWEVER 你的一个基本字符串有加号,这是正则表达式中的元字符。这些必须逃脱。最快的黑客如下:
new RegExp(i.replace(/\+/g, "\\+"), "g"), arr[i]);
以下是一个工作示例:http://jsfiddle.net/mFj2f/
一般来说,我认为应该检查所有的元字符。
答案 1 :(得分:2)
正则表达式中的i将是字符串i,而不是变量i。请改为new RegExp(i,'g');
,您应该获得所需的结果
答案 2 :(得分:0)
var W,H,A,K;
W='123456'.split(''),
H='test this WHAK com www for'.split(' '),
A='2 is a 1 (1ed 6 3 2, 1 6 3 that), 1ing 6 5.3.4';
K=0;for(K in W)A=A.split(W[K]).join(H[K]);
document.write(A);