我正在尝试使用正则表达式来比较JavaScript中的字符串。我希望将所有'.'s
和'%'s
替换为空字符'',但问题是我不想替换第一次出现的'.'
。
value.replace(/\%\./g, '');
预期结果如下:
.4.5.6.7. ==> .4567
4.5667.444... ==> 4.56667444
..3445.4 ==> .34454
答案 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/