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

How to replace all matching characters except the first occurrence

我正在尝试使用正则表达式比较 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) 中找到的第一个 . 的索引进行比较。如果它们相同,则正则表达式将其保留为 .。后续匹配的偏移量将高于第一个 . 匹配的偏移量,并将替换为 ''% 将始终替换为 ''


两个版本的结果是:

4.5667.444... ==> 4.56667444
%4.5667.444... ==> 4.5667444

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