Заменить n-й вхождение числа в строке на javascript [duplicate]

1

Этот вопрос задавали раньше, но мне не удалось решить проблему. У меня есть строка, которая содержит числа, например

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
  • 0
    Какой nth вы хотите заменить?
  • 0
    второе в моем случае, но я ищу общее решение.
Показать ещё 2 комментария
Теги:

2 ответа

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 последовательности с /\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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню