Изменить N-е совпадение символа в строке

247
06 октября 2017, 19:18

у меня есть строка:

"sample sample sample"

И мне нужно изменить, например, второе совпадение, чтобы на выходе получилось:

"sample hello sample"

Как заменить все три совпадения я знаю:

"sample sample sample".replace(/sample/g, "hello");

Но как ограничиться именно вторым?

Answer 1

Вторым параметром у replace() может быть функция:

var count = 0; 
var num = 2; 
var str = 'sample sample sample'; 
str = str.replace(/sample/g, function(a) { 
  ++count; 
  if (count == num) { 
    return 'hello'; 
  } else { 
    return a; 
  } 
}); 
console.log(str);

Answer 2

var str = "sample sample sample"; 
var arr = str.split(' '); 
var count = 0; 
var i = 0; 
for (; i < arr.length; i++) { 
  if (arr[i] == "sample") { 
    count++ 
  } 
  if (count == 2) { // в count записываем какое совпадение по счету нужно изменить 
    arr[i] = "hello"; 
    break; 
  } 
} 
str = arr.join(' '); 
alert(str);

Answer 3

При крайне малом разнообразии структуры, можно использовать что-то вроде этого:

console.log('sample sample sample'.replace(/((sample).*?)(\2)/, '$1hello'));

READ ALSO
CheckBox + JavaScript + калькулятор

CheckBox + JavaScript + калькулятор

Есть решения по калькуляторам с Чекбоксами вот тут Но работает только если одно вложениеНадо вот к этому коду:

346
REDUX-SAGA ERROR _this2.props.dispatch is not a function

REDUX-SAGA ERROR _this2.props.dispatch is not a function

Привет всемПосле использование thunk прочитал про

332
Вызов функции по событию onclick [дубликат]

Вызов функции по событию onclick [дубликат]

На данный вопрос уже ответили:

300
Не корректно работает слайдер

Не корректно работает слайдер

Использую слайдер fullPagejs-master

247