在String.replace()方法中使用匿名函数

时间:2013-02-23 12:14:12

标签: javascript regex lambda

我有一个正则表达式数组,目前只有一个元素的长度,以及一个我希望通过循环遍历数组来搜索/替换的字符串:

var str = "i am*happy all the*time",
    rex = [
        /(\S)\s*\*\s*(\S)/g
        ],
    i = 0,
    r = rex.length;

这就是我现在想要实现的目标:

for (i; i < r; i += 1) {
    str.replace(rex[i], function(star, p1, p2) {
        console.log(i, star, p1, p2);
        return p1 + '\\s*(.*)\\s*' + p2;
    });
}

结果应为i am*\\s*(.*)\\s*happy all the\\s*(.*)\\s*time。但目前,str似乎未受影响,即使我检查控制台时正在进行相关匹配。您可以自己查看here

所以我错过了一些简单的东西,我是否误解了在String.replace()中使用lambda表达式的问题,或者这里有什么更根本的错误?

...

额外信息: 我现在正在使用Chrome 24,如果感兴趣的话;我刚才读过,String.replace()中的匿名函数并不适用于所有浏览器,虽然我认为现在可以解决(该选项在ECMAScript v3中引入)。

1 个答案:

答案 0 :(得分:1)

String.replace()不会更改原始字符串,但会返回新字符串。您应该分配结果

for (i; i < r; i += 1) {
    str = str.replace(rex[i], function(star, p1, p2) {...})
}