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

时间:2009-12-27 21:39:56

标签: javascript jquery

我有这个

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

这会在文本框中获取看起来像这个

的值

12/31/2009

现在我就这样做了

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

,结果是

c_1231 / 2009

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

3 个答案:

答案 0 :(得分:224)

您需要将g flag设置为全局替换:

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

否则只会替换第一次出现。

答案 1 :(得分:71)

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

如果你想要一个真正的基于字符串的替换 - 例如因为匹配字符串是动态的并且可能包含在regexen中具有特殊含义的字符 - 那么JavaScript的惯用语是:

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

答案 2 :(得分:9)

您可以使用:

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