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

    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/

我认为,总的来说,应该检查所有的元字符。

10-01 00:59
查看更多