2014-01-16 455 views
31
var variableABC = "A B C"; 
variableABC.replace('B', 'D') //wanted output: 'A D C' 

但 'variableABC' 并没有改变:node.js string.replace不起作用?

variableABC = 'A B C'

时,我想这是 'A d C'。

+2

字符串是不可变的,你必须从某个地方传的结果,很可能回本身就像下面的答案一样。 – adeneo

回答

74

根据Javascript标准,String.replace不应该修改字符串本身。它只是返回修改后的字符串。有关更多信息,请参阅Mozilla Developer Network documentation

你总是可以串正好被设置为修改后的值:

variableABC = variableABC.replace('B', 'D')

编辑:上面给出的代码是只更换一次出现。

要更换所有出现,你可以这样做:

variableABC = variableABC.replace(/B/g, "D"); 

要全部替换,而忽略套管

variableABC = variableABC.replace(/B/gi, "D"); 
8

是不是与string.replace 返回的值,而不是修改源字符串?

所以,如果你想修改variableABC,你需要这样做:

var variableABC = "A B C"; 

variableABC = variableABC.replace('B', 'D') //output: 'A D C' 
8

字符串总是建模为不变(ATLEAST在heigher高级语言蟒蛇/ JAVA/JavaScript的/斯卡拉/目标-C)。

所以像串联,替换总是任何字符串操作返回一个新的字符串,其中包含预期的价值,而原来的字符串仍然是相同的。

+5

只是FYI:Ruby字符串是可变的。 – Jimmy

+0

@Jimmy Thar在这里是多余的。 –

0

如果你只是想揍所有的子出字符串的情况下,而无需使用正则表达式,你可以使用:

var replacestring = "A B B C D" 
    const oldstring = "B"; 
    const newstring = "E"; 
    while (replacestring.indexOf(oldstring) > -1) { 
     replacestring = replacestring.replace(oldstring, newstring); 
    }   
    //result: "A E E C D"