javascript用数组替换全局

时间:2010-01-14 12:37:53

标签: 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(...)”,脚本会占用大量空间。

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

3 个答案:

答案 0 :(得分:7)

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

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

编辑:正如Andy所说,你可能不得不使用像this one这样的脚本来逃避特殊字符。

答案 1 :(得分:4)

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

当对象array很大时,它特别有效:

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

请注意,这需要Object.keys方法可用,但如果不是,则可以轻松填充。

答案 2 :(得分:2)

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

for (var val in array)
    text= text.split(val).join(array[val]);

请注意,将Object用作通用查找存在问题。如果有人用对象原型(不好主意,但有些图书馆做),你可以得到比你想要的更多的val;您可以使用hasOwnProperty测试来避免这种情况。如果你的字符串恰好与Object的{​​{1}}方法发生冲突,那么在IE中,IE会神秘地隐藏它。

对于你的例子,你可以,但作为字符串可以是任何东西的一般情况,你需要解决它,通过处理关键字符串以避免冲突,或者使用不同的数据结构例如toString数组的数组。