如何更换所有sting +变量?为什么我无法将所有[0]
和[1]
替换为new
?这是一个简单的例子,在实际情况中,[0] [1] [2] ......具有更多条件。感谢。
var a='some thing [0] [1] [0] [1] ';
for(var i=0; i<3; i++){
a.replace(new RegExp(" ["+i+"] ", 'g'),' new');
}
alert(a);
答案 0 :(得分:3)
由于
<强>#1 强>
现在正则表达式(例如0 [0]
);这将匹配<space>0<space/>
您可能正在寻找" \\["+i+"\\] "
,因为括号是一个特殊字符,
<强>#2 强>
你没有存储替换的结果,你应该这样做:
a = a.replace(new RegExp(" \\["+i+"\\] ", 'g'),'new');
Comebine,你得到了
var a='some thing [0] [1] [0] [1] ';
for(var i=0; i<3; i++){
a = a.replace(new RegExp(" \\["+i+"\\] ", 'g'),'new');
}
alert(a);
Which outputs (Fiddle) some thingnewnewnewnewnew
我希望这是预期的结果。
最后但并非最不重要的是,这是对正则表达式的滥用,您可以轻松地have a one line solution。
答案 1 :(得分:1)
答案 2 :(得分:0)
我会这样做:
var a='some thing [0] [1] [0] [1] ';
a = a.replace(/\[[0-2]\]/g,' new');
alert(a);
for循环在这里是过度的,因为正则表达式可以开箱即用。另外,我建议使用文字语法/.../
。
答案 3 :(得分:0)
字符串是不可变的,replace
确实返回新的修改后的值。您必须自己将其重新分配给a
变量(请参阅Replace method doesn't work):
a = a.replace(new RegExp(" ["+i+"] ", 'g'), ' new');
但是,由于[]
表示正则表达式中的character class,因此还不足以使其正常工作。要按字面意思匹配它们,你必须使用反斜杠(并且在字符串文字中再次)来逃避它们:
a = a.replace(new RegExp(" \\["+i+"\\] ", 'g'), ' new');
现在,您可以使用实际的字符类来匹配从0到2的所有数字:
var a = 'some thing [0] [1] [0] [1] ';
alert(a.replace(/\[[0-3]\]/g, ' new')); // regex literal to simplify syntax