之前有人问过这个问题,但我没有成功解决问题。我有一个包含数字的字符串,例如
var stringWithNumbers = "bla_3_bla_14_bla_5";
Run Code Online (Sandbox Code Playgroud)
我想用javascript替换第n次出现的数字(例如第2次)。我没有得到比
var regex = new RegExp("([0-9]+)");
var replacement = "xy";
var changedString = stringWithNumbers.replace(regex, replacement);
Run Code Online (Sandbox Code Playgroud)
这只会更改第一个数字。有人建议使用像 一样的反向引用$1,但这对我没有帮助。
例如,结果应该是
"bla_3_bla_xy_bla_5" //changed 2nd occurence
Run Code Online (Sandbox Code Playgroud)
您可以定义一个匹配所有出现的正则表达式,并将回调方法作为第二个参数传递给该replace方法,并在那里添加一些自定义逻辑:
var mystr = 'bla_3_bla_14_bla_5';
function replaceOccurrence(string, regex, n, replace) {
var i = 0;
return string.replace(regex, function(match) {
i+=1;
if(i===n) return replace;
return match;
});
}
console.log(
replaceOccurrence(mystr, /\d+/g, 2, 'NUM')
)Run Code Online (Sandbox Code Playgroud)
这里,replaceOccurrence(mystr, /\d+/g, 2, 'NUM')takesmystr搜索所有数字序列,/\d+/g当第二次出现时,它用一个NUM子字符串替换。