Этот вопрос задавали раньше, но мне не удалось решить проблему. У меня есть строка, которая содержит числа, например
var stringWithNumbers = "bla_3_bla_14_bla_5";
Я хочу заменить n-е число числа (например, 2-го) на javascript. Я не стал намного больше, чем
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
Вы можете определить регулярное выражение, которое соответствует всем вхождениям, и передать метод обратного вызова в качестве второго аргумента методу 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
последовательности с /\d+/g
и когда дело доходит до второго вхождения, оно заменяется на NUM
подстрока.
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);