Обертка тегом одинаковых в тексте слов, буквы которых имеют разные регистры, с помощью регулярных выражений

Есть инпут, при вводе какого-то слова или буквы, которые встречаются несколько раз в тексте, эти повторения будут выделены тегом mark. Я нахожу одинаковые слова с помощью регулярного выражения, а потом заменяю их с помощью метода replace(). Однако при таком раскладе все буквы будут маленькие, так как на замену идет буква, которая была в инпуте. И соответственно, все повторяющиеся буквы большого регистра (или одинаковые слова, начинающиеся с большой буквы) будут заменены на те же буквы, но с маленьким регистром. Как сделать так, чтобы регистры букв при замене соответствовали изначальным регистрам?

const text = document.querySelector('.text');

const input = document.querySelector('.input');

input.addEventListener('input', () => {
    let value = input.value
    words(text, value)
    
})

function words(text, search) {
    let words = text.textContent
    if (words.indexOf(`${search}`) != -1 && search != '' && search != ' ') {
        let searchAll = new RegExp(search, 'gi')
        let newText = words.replace(searchAll, '<mark>' + search + '</mark>')
        text.innerHTML = newText
    } else {
         console.log('did not find');
    }
}

    

Ответы (1 шт):

Автор решения: UModeL

Зачем indexOf, когда есть test ? Думаю, что в этом месте была проблема.

const text = document.querySelector('.text');
const input = document.querySelector('.input');

input.addEventListener('input', words);

function words() {
  let search = this.value;
  let newText = text.textContent;
  let rExp = new RegExp(`(${search})`, 'gi');
  if (rExp.test(`${newText}`) && search) {
    text.innerHTML = newText.replace(rExp, '<mark>$1</mark>');
  } else {
    console.log('did not find');
    text.innerHTML = newText;
  }
}
<input class="input">
<p class="text">Есть инпут, при вводе какого-то слова или буквы, которые встречаются несколько раз в тексте, эти повторения будут выделены тегом mark. Я нахожу одинаковые слова с помощью регулярного выражения, а потом заменяю их с помощью метода replace().</p>

→ Ссылка