如何替换除第一次出现之外的所有匹配字符
我正在尝试使用正则表达式来比较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/