@Andrey_Cap

Работа с substring. Как изменить текст внутри string?

Напиши функцию replaceSubstring, которая будет принимать строку string, строку words, которая содержит два слова через пробел, и новую подстроку substring. Цель функции - заменить в строке string все, что находится между указанными словами words на новую подстроку substring.

Пример:

replaceSubstring('I hate these robots', 'I robots', 'love these cute') // 'I love these cute robots'
replaceSubstring('I am a robot', 'I robot', 'dreamed of a') // 'I dreamed of a robot'

Я дошёл до этого шага, потом застрял.
Подскажите пожалуйста, как мне дальше решать её?

function replaceSubstring(string, words, substring) {

    const newString = string.split(" ");
    const newWord = words.split(" ");

    for(let i = 0; i < newWord.length; i++){
      for(let j = 0; j < newString.length; j++){
        if(newWord[i] === newString[j]){
          newString[i].replace(newWord[i]);
        }
      }
    }
    console.log(newWord);
    console.log(newString);

}
  • Вопрос задан
  • 224 просмотра
Решения вопроса 2
@dimoff66
Кратко о себе: Я есть
Вариант с поиском строковыми функциями

function replaceSubstring(string, words, substring) {
  // Получаем слова между которыми искать замену
  const [word1, word2] = words.split(' ')

  // Находим индексы этих слов
  const [pos1, pos2] = [string.indexOf(word1), string.indexOf(word2)]
  if (pos1 < 0 || pos1 + word1.length >= pos2) return string 

  // Добавляем пробелы в строку замены, если отсутствуют
  if (!substring.startsWith(' ')) substring = ' ' + substring
  if (!substring.endsWith(' ')) substring += ' '

  // Возвращаем новую стрроку с итерационным вызовом, так как могут быть и другие вхождения
  return string.substring(0, pos1 + word1.length) + 
    substring + 
    word2 +
    replaceSubstring(string.substring(pos2 + word2.length), words, substring)  
}


Вариант с поиском через регулярные выражения

function replaceSubstring2(string, words, substring) {
  if (!substring.startsWith(' ')) substring = ' ' + substring
  if (!substring.endsWith(' ')) substring += ' '

  const regex = words.replace(' ', '.+?')
  return string.replaceAll(new RegExp(regex, 'g'), words.replace(' ', substring))
}
Ответ написан
Комментировать
z80b
@z80b
Frontend
const replaceSubstring = (string, words, substring) => {
    const [ word1, word2 ] = words.split(/\s/);
    const re = new RegExp(`(${word1}\\s?).+?(\\s?${word2})`);
    return string.replace(re, `$1${substring}$2`);
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы