使用数组元素替换多个匹配项

时间:2011-08-16 00:27:24

标签: javascript arrays string

我在关联数组中有几个字符串:

    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);
}

你们知道如何解决这个问题吗?

3 个答案:

答案 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);