javascript全局替换为数组

javascript全局替换为数组,javascript,replace,Javascript,Replace,您可以使用阵列进行替换: var array = {"from1":"to1", "from2":"to2"} for (var val in array) text = text.replace(array, array[val]); 但是,如果你需要在全球范围内进行替换,又该怎么办呢 text=text.replace(/from/g,“to”) 数组相当大,所以如果我为每个变量编写“text=text.replace(…)”,脚本将占用大量空间 在这种情况下,如何使用数组? “

您可以使用阵列进行替换:

var array = {"from1":"to1", "from2":"to2"}

for (var val in array)
    text = text.replace(array, array[val]);
但是,如果你需要在全球范围内进行替换,又该怎么办呢 text=text.replace(/from/g,“to”)

数组相当大,所以如果我为每个变量编写“text=text.replace(…)”,脚本将占用大量空间

在这种情况下,如何使用数组? “/from1/g”:“to1”不起作用

var array = {"from1":"to1", "from2":"to2"}

for (var val in array)
    text = text.replace(new RegExp(val, "g"), array[val]);

编辑:正如Andy所说,您可能需要使用类似的脚本来转义特殊字符。

以下是JS中简单的、基于非正则表达式的字符串替换的习惯用法,因此您不必担心正则表达式特殊字符:

for (var val in array)
    text= text.split(val).join(array[val]);
注意:将对象用作通用查找时存在问题。如果有人对对象原型蒙混过关(这主意不好,但有些库会这么做),您可以获得更多
val
​比你想要的要多;您可以使用
hasOwnProperty
测试来避免这种情况。另外,在IE中,如果您的字符串与
对象
的方法(如
toString
)发生冲突,IE将神秘地隐藏它


对于这里的示例,您可以这样做,但作为字符串可以是任何内容的一般情况,您需要解决它,或者通过处理键字符串以避免冲突,或者通过使用不同的数据结构,例如
[find,replace]
数组。

这是我的解决方案,假设
数组中的字符串键不需要转义

当对象
数组
较大时,它特别有效:

var re = new RegExp(Object.keys(array).join("|"), "g");
var replacer = function (val) { return array[val]; };
text = text.replace(re, replacer);

注意,这要求
对象.keys
方法可用,但如果不可用,则可以轻松地对其进行填充。

如果字符串可能包含regexp特殊字符,请不要忘记正确转义它们。数组实际上是一个对象,而不是数组对象,即使可以将其视为关联数组:)这是否回答了您的问题?