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特殊字符,请不要忘记正确转义它们。数组实际上是一个对象,而不是数组对象,即使可以将其视为关联数组:)这是否回答了您的问题?