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

时间:2015-05-14 00:07:55

标签: javascript jquery regex string string-matching

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

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

预期结果如下:

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

1 个答案:

答案 0 :(得分:7)

您可以将函数传递给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 ? '.' : '') : ''; 
}) 

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

两个版本都会产生:

  

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

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