使用数组元素替换多个出现的字符串

ari*_*ayu 3 javascript arrays string

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

    var arr = {
        '============================================': '---------',
        '++++++++++++++++++++++++++++++++++++++++++++': '---------',
        '--------------------------------------------': '---------'
    };
Run Code Online (Sandbox Code Playgroud)

我想用相应的值替换每个键的出现次数.我想出的是:

    for (var i in arr)
    {
        strX = str.replace(i, arr[i]);

        console.log('arr[\''+i+'\'] is ' + arr[i] + ': ' + strX);
    }
Run Code Online (Sandbox Code Playgroud)

这有效,但仅限于首次出现.如果我将正则表达式更改为/i/g,则代码不起作用.

for (var i in arr)
{
    strX = str.replace(/i/g, arr[i]);

    console.log('arr[\''+i+'\'] is ' + arr[i] + ': ' + strX);
}
Run Code Online (Sandbox Code Playgroud)

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

Ray*_*oal 7

代替

strX = str.replace(/i/g, arr[i]);
Run Code Online (Sandbox Code Playgroud)

你想做点什么.

strX = str.replace(new RegExp(i, "g"), arr[i]);
Run Code Online (Sandbox Code Playgroud)

这是因为/i/g指的是字母i,而不是变量的值i. 但是你的一个基本字符串有加号,这是正则表达式中的元字符.这些必须逃脱.最快的黑客如下:

new RegExp(i.replace(/\+/g, "\\+"), "g"), arr[i]);
Run Code Online (Sandbox Code Playgroud)

这是一个工作示例:http://jsfiddle.net/mFj2f/

但是,一般来说,我认为应该检查所有的元字符.

  • 我想你可能需要为`+`做一个`.indexOf()`测试,然后做一个`.replace(/\+/g,'\\ +')`. (3认同)
  • 实际上''+++++++++ +'''''''''''''''''''''''''''''''''''''' (2认同)