为什么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); }