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