Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用数组元素替换多个出现字符串_Javascript_Arrays_String - Fatal编程技术网

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

Javascript 使用数组元素替换多个出现字符串,javascript,arrays,string,Javascript,Arrays,String,我在关联数组中有几个字符串: var arr = { '============================================': '---------', '++++++++++++++++++++++++++++++++++++++++++++': '---------', '--------------------------------------------': '---------' }; 我想用相应

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

    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]);
以下是一个工作示例:


不过,一般来说,我认为应该检查所有的元字符。

正则表达式中的I将是字符串I,而不是变量I。尝试使用
newregexp(i,'g'),您应该会得到所需的结果

var W,H,A,K;
W='123456'。拆分(''),
H='test this WHAK com www for'.split(''),
A='2是一个1(第6.3.2段,第1.6.3段),等于65.3.4';
K=0;对于(K in W)A=A.split(W[K])。join(H[K]);

文件。编写(A)不要将
用于。。。在阵列上的
中。一旦有人触碰了阵列原型,你就会受到伤害。我不想作恶,但阵列是[],而{}是对象。@cdhowie:OP实际上没有使用阵列<代码>变量arr={…}
。这是真的。名字
arr
把我弄糊涂了。:)但是,如果有人触摸对象原型,OP仍然会有问题。但是触摸对象原型本身也有很多问题,如果我没记错的话,在IE中根本做不到。
'+++++'
一个实际上会有问题,因为
+
需要转义。遗憾的是,没有内置的方法来转义特殊的正则字符:(该死,没有
\Q
\E
模式。引用
r'
%r{…)
在JS中…不过我仍在寻找。除非有人比我强,否则我会为OP找到一些东西。:-)我想你可能需要做一个
.indexOf()
测试
+
,然后做一个
.replace(/\+/g,\\+')
。谢谢你的评论,pst和patrick。我有点困惑为什么小提琴一开始不起作用+1致patrick和pst。为您的答案添加解释?1sr行声明变量。第2行和第3行是相同数量搜索替换的数组。第四行是我们原始代码的映射。然后通过按搜索词拆分和按替换词/短语联接来完成搜索和替换。更换完成后,代码由eval运行。