如何替换除第一次出现之外的所有匹配字符

我正在尝试使用正则表达式来比较JavaScript中的字符串。 我想用空字符”替换所有'.'s'%'s ,但是我不想替换第一次出现'.'

 value.replace(/\%\./g, ''); 

预期结果如下:

 .4.5.6.7. ==> .4567 4.5667.444... ==> 4.56667444 ..3445.4 ==> .34454 

您可以传入一个replace函数,并跳过第一个匹配,如下所示:

 var i = 0; value.replace(/[\.\%]/g, function(match) { return match === "." ? (i++ === 0 ? '.' : '') : ''; }); 

这是一个没有外部变量的自包含版本:

 value.replace(/[\.\%]/g, function(match, offset, all) { return match === "." ? (all.indexOf(".") === offset ? '.' : '') : ''; }) 

第二个版本使用传递给replace()函数的offset来与第一个版本的索引进行比较. 找到原始字符串( all )。 如果它们是相同的,则正则表达式将其保留为a . 。 后续匹配将具有比第一个更高的偏移. 匹配,并将替换为''%将始终替换为''


两个版本都会导致:

4.5667.444 … ==> 4.56667444
%4.5667.444 … ==> 4.5667444

两个版本的演示: http : //jsbin.com/xuzoyud/5/