为什么JavaScript在使用replace时仅replace第一个实例?

我有这个

var date = $('#Date').val(); 

这将得到在文本框中的值看起来像这样

2009/12/31

现在我就这样做了

 var id = 'c_' + date.replace("/", ''); 

结果是

c_1231 / 2009

它错过了最后一个'/'我不明白为什么。

您需要将g标志设置为全局replace:

 date.replace(new RegExp("/", "g"), '') // or date.replace(/\//g, '') 

否则,只有第一次出现将被replace。

与C#/ .NET类库(以及大多数其他合理的语言)不同,当您将String作为string.replace方法的string-to-matchparameter passing时,不会执行stringreplace。 它将string转换为RegExp并进行正则expression式replace。 正如Gumbo所解释的那样,正则expression式的replace需要一个默认情况下不会默认的g旗帜标志来replace所有的匹配。

如果你想要一个真正的基于string的replace – 例如,因为匹配string是dynamic的,并且可能包含在正则expression式中有特殊含义的字符 – JavaScript的成语是:

 var id= 'c_'+date.split('/').join(''); 

您可以使用:

 String.prototype.replaceAll = function(search, replace) { if (replace === undefined) { return this.toString(); } return this.split(search).join(replace); }