Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как вернуть найденную подстроку в строке? (https://javascript.ru/forum/misc/81033-kak-vernut-najjdennuyu-podstroku-v-stroke.html)

CryNet 18.09.2020 11:08

Как вернуть найденную подстроку в строке?
 
В цикле перебираются элементы, из них при помощи textContent вытягивает содержимое, а мне нужно в этой строке найти подстроку и вернуть её, чтобы можно было слепить новую строку. Сейчас часть кода выглядит так, но работает не так как нужно:

option.forEach(element => {
        const text = element.textContent.replace(/\s+/g, ' ').trim() // убираем лишние пробелы
        const regexp = new RegExp(`${event.detail.value}`, 'i')
        const rez = text.replace(regexp, `<span class="-underline">${event.detail.value}</span>`)

        element.childNodes[0].remove() // удаляем текстовую ноду
        element.insertAdjacentHTML("afterbegin", rez) // вставляем span с текстом
    })


В event.detail.value находится искомая подстрока, мне в element.textContent нужно найти event.detail.value, но вернуть то, что нашлось. Использовать event.detail.value нельзя, т.к. оригинальная строка может быть "Тест", а юзер будет вводить "тЕст", в итоге получится новая строка, а должен сохраниться оригинал, т.е. "Тест", поэтому я хочу вытащить искомую подстроку в строке. Как это можно сделать?

рони 18.09.2020 11:11

CryNet,
не осилил.

CryNet 18.09.2020 11:30

Цитата:

Сообщение от рони (Сообщение 528990)
CryNet,
не осилил.

Прошу прощения.

Есть массив со строками:
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"]


То как вернуть часть строки, если она нашлась?

voraa 18.09.2020 12:23

const rez = text.replace(regexp,  (str, p1) => `<span class="-underline">${p1}</span>`)

CryNet 18.09.2020 12:40

Цитата:

Сообщение от voraa (Сообщение 528992)
const rez = text.replace(regexp,  (str, p1) => `<span class="-underline">${p1}</span>`)

Спасибо. это сработало:
const rez = text.replace(regexp,  (str, p1) => `<span class="-underline">${str}</span>`)


Часовой пояс GMT +3, время: 18:25.