0

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

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似乎没有受到影响,即使当我检查控制台时,相关的匹配项也在进行中。您可以在此处亲自查看。

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

...

额外信息: 我现在正在使用 Chrome 24,以防万一;不久前我读到 String.replace() 中的匿名函数并非对所有浏览器都可用,尽管我认为现在可以解决(该选项是在 ECMAScript v3 中引入的)。

4

1 回答 1

1

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

for (i; i < r; i += 1) {
    str = str.replace(rex[i], function(star, p1, p2) {...})
}
于 2013-02-23T12:31:04.927 回答