之前曾问过这个问题,但我没有成功解决问题。 我有一个包含数字的字符串,例如
var stringWithNumbers = "bla_3_bla_14_bla_5";
我想用javascript替换数字的第n个出现(例如第2个)。我没有比
更快var regex = new RegExp("([0-9]+)");
var replacement = "xy";
var changedString = stringWithNumbers.replace(regex, replacement);
这只会改变第一个数字。
建议使用像$1
这样的反向引用,但这对我没有帮助。
结果应该是
"bla_3_bla_xy_bla_5" //changed 2nd occurence
答案 0 :(得分:2)
您可以定义一个匹配所有次出现的正则表达式,并将回调方法作为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')
)
此处,replaceOccurrence(mystr, /\d+/g, 2, 'NUM')
需要mystr
,搜索所有带有/\d+/g
的数字序列,当涉及到第二次出现时,它将替换为NUM
子字符串。
答案 1 :(得分:1)
var stringWithNumbers = "bla_3_bla_14_bla_5";
var n = 1;
var changedString = stringWithNumbers.replace(/[0-9]+/g,v => n++ == 2 ? "xy" : v);
console.log(changedString);