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

3

我有一个关联数组中包含多个字符串:

    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);
}

你们知道如何解决这个问题吗?这个问题与IT技术有关。请注意,不要删除HTML标签。

2
不要在数组上使用for ... in。一旦有人操作了数组原型,你就会陷入困境。 - cdhowie
3
我不想做恶,但是[]为数组,{}为对象。 - Bakudan
@cdhowie:OP实际上并没有使用数组。var arr = {...} - user113716
1
这是真的。arr 这个名字让我感到困惑。:) 但是,如果有人触及 object 原型,那么 OP 仍然会遇到问题。 - cdhowie
触及对象原型本身就有很多问题,而且如果我没记错的话,在IE中根本无法完成。 - LoveAndCoding
@Ktash:不用担心,这段代码片段是为了在诺基亚S40 Web应用上运行的。 - ariefbayu
3个回答

7

不是

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/ 一般来说,应该检查所有元字符。

2
实际上,'++++++++' 这个字符串会有问题,因为 + 需要进行转义。 - user113716
1
遗憾的是,没有内置的方法来转义特殊的正则表达式字符 :( - user166390
3
我认为你可能需要进行一个.indexOf()测试来查找+,然后执行.replace(/\+/g,'\\+') - user113716
1
感谢评论,pst和patrick。一开始我有点困惑为什么小提琴不起作用!+1给patrick和pst。 - Ray Toal
哇,使用RegExp类!这对我来说是新的。谢谢! - ariefbayu
显示剩余2条评论

2

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


0

   var W,H,A,K;

W='123456'.split(''),

H='test this WHAK com www for'.split(' '),

A='2 is a 1 (1ed 6 3 2, 1 6 3 that), 1ing 6 5.3.4';

K=0;for(K in W)A=A.split(W[K]).join(H[K]);

  document.write(A);


请在您的答案中添加解释。 - HaveNoDisplayName
第一行声明变量。第二行和第三行是具有相同数量的搜索替换项的数组。第四行是我们原始代码的映射。然后通过将搜索词拆分并连接替换词/短语来进行搜索和替换。替换完成后,通过eval运行代码。 - Dave Brown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接