用javascript替换字符串中第n次出现的数字

AGu*_*ald 2 javascript regex

之前有人问过这个问题,但我没有成功解决问题。我有一个包含数字的字符串,例如

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)

Wik*_*żew 6

您可以定义一个匹配所有出现的正则表达式,并将回调方法作为第二个参数传递给该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子字符串替换。