javascript用global替换所有字符串和变量

时间:2014-02-04 19:39:13

标签: javascript replace

如何更换所有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);

http://jsfiddle.net/P8HSA/

4 个答案:

答案 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)

将[和]之间的所有数字替换为 new

var a = 'some thing [0]  [1]  [0]  [1] ';

a = a.replace(/\[\d\]/g, 'new');

Demo

答案 2 :(得分:0)

我会这样做:

var a='some thing [0]  [1]  [0]  [1] ';
a = a.replace(/\[[0-2]\]/g,' new');
alert(a);

for循环在这里是过度的,因为正则表达式可以开箱即用。另外,我建议使用文字语法/.../

工作小提琴:http://jsfiddle.net/P8HSA/6/

答案 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