为什么 javascript 在使用替换时只替换第一个实例?

我有这个

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

得到文本框中的值,看起来是这样的

2009年12月31日

现在我在上面做这个

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

结果就是

C _ 1231/2009

它错过了最后的’/’我不明白为什么虽然。

152140 次浏览

您需要将 < em > g 旗帜设置为在全球范围内替换:

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

否则将只替换第一个匹配项。

不像 C #/。NET 类库(以及大多数其他合理的语言) ,当您将 String作为字符串匹配参数传递给 string.replace方法时,它不会执行字符串替换。它将字符串转换为 RegExp并执行正则表达式替换。正如 Gumbo 解释的那样,正则表达式替换需要 g‍全局标志(默认情况下没有打开)一次性替换所有匹配项。

如果您想要一个真正的基于字符串的替换ーー例如,因为 match-string 是动态的,并且可能包含在 regexen 中具有特殊意义的字符ーー 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);
}