@uroot

Как вернуть найденную подстроку в строке?

Есть массив со строками:
const string = ["ТЕСТ","Строка", "String"]
Есть поле поиска, в который юзер что-то пишет, чтобы найти нужную эму строку из string, допустим на JS это выглядит так:
const search = "тЕ" // юзер ввёл "тЕ"
Мне нужно перебрать string и найти там элементы массива, которые содержат search. Я бы мог восспользоваться методом include(), но он вернёт true|false, а я хочу вернуть кусок этой строки - модифицировать её - сохранить в этом же массиве. То есть после всего вышеописанного массив должен выглядеть так:
const  string = ["<span class="-underline">ТЕ</span>СТ","Строка", "String"]

Медотом replace() я тоже восспользоваться не могу, а то получиться такое:
const  string = ["<span class="-underline">тЕ</span>СТ","Строка", "String"]

То как вернуть часть строки, если она нашлась, чтобы получилась строка вида: "ТЕСТ",
  • Вопрос задан
  • 363 просмотра
Пригласить эксперта
Ответы на вопрос 7
Alexandre888
@Alexandre888
Javascript-разработчик
const search = "тЕ"
const word = ""
for (let i = 0; i < arr.length; i++) {
    if (arr[i] === search) word += arr[i]
}

в чем проблема?
Ответ написан
Комментировать
Tim-A-2020
@Tim-A-2020
const string = ["ТЕСТ", "Строка", "String"];
const search = "ка";

const newstring = string.map(el => el.includes(search) ? el + '-----' : el);

console.log(newstring)
Ответ написан
Комментировать
Allegro75
@Allegro75
SummaryTables.ru - сайт с футбольной статистикой
Здесь может быть ответ на твой вопрос: https://www.youtube.com/watch?v=vV4cUAZvEy4&t=33s&...
Видео "Живой поиск на JavaScript"
Ответ написан
Комментировать
fallus
@fallus
<input id="myInput" type="text">
<div id="myResult">Вы выбрали: <span></span></div>


// Исходный массив
const string = ["ТЕСТ","Строка", "String"]
// Инпут
const myInput = document.querySelector('#myInput')
// Куда выводить результат
const myResult = document.querySelector('#myResult')

// При вводе в инпут
myInput.addEventListener('input', e => {
   // Фильтруем исходный массив
   // Если эелемент массива (например "ТЕСТ") содержит введённую в инпут букву\строку
   // То НЕ фильтруем этот элемент массива
   // Остальные элементы фильруем
   const filteredString = string.filter(item => item.toLowerCase().indexOf(e.target.value.toLowerCase()) != -1)

   // Выводим в myResult результат
   // Отфильтрованный массив filteredString преобразуем в строку, разделённую ', '
   // Если массив пуст, то выводим 'ничего...'
   myResult.innerHTML = filteredString.join(', ') || 'ничего...'
})
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Ответ написан
Комментировать
hzzzzl
@hzzzzl
попробуй

const string = ["ТЕСТ","Строка", "String"]
const search = "тЕ"

const re = new RegExp(search, 'gi')

string.map(s => {
  const match = s.match(re)
  return match ? s.replace(re, `<span class="-underline">$&</span>`) : s 
})

// (3) ["<span class="-underline">ТЕ</span>СТ", "Строка", "String"]
Ответ написан
Комментировать
@uroot Автор вопроса
Мне подсказали такое решение:
string.forEach(element => {
const regexp = new RegExp(`${search}`, 'i')
const rez = text.replace(regexp,  (str, p1) => `<span class="-underline">${str}</span>`)
})
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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