我有一个正则表达式数组,目前只有一个元素的长度,以及一个我希望通过循环遍历数组来搜索/替换的字符串:
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中引入)。
答案 0 :(得分:1)
String.replace()
不会更改原始字符串,但会返回新字符串。您应该分配结果
for (i; i < r; i += 1) {
str = str.replace(rex[i], function(star, p1, p2) {...})
}