Илья
других способов нет
Roman
не парсите хтмл регулярками
☕️
Смотри на открывающий и закрывающий тег
Maksym
Верно, но уменя обработка массива с более 200 000 текстовых строк. Если я каждую буду превращать в DOM.
Я повисну на вечно.
☕️
Roman
https://stackoverflow.com/a/1732454/1268907
Maksym
Хахах помните !))
Да верно, я примени все рекомендации что мне тут подсказали. и я увеличил скорость поиска с двух минут до 1 секунды. И за это всем Огромное СПАСИБО.
Но теперь у меня встал вопрос, я хочу выделить искомое значение в таблице.
Maksym
☕️
А зачем парсить хтмл для этого ? У тебя же есть где-то массив данных которые ты рендеришь
Maksym
Все верно, просто в некоторых ячейках есть кастомные html теги
☕️
Maksym
Maksym
Видите в последней ячейке кнопка, которая есть для каждой строки.
Maksym
Я данные для построения таблицы получаю от клиента, и хз что там.
Обычно текст, но иногда есть и html который должен отработать как html в таблице.
Илья
я пока решений кроме регулярки не вижу
Maksym
Да верно, получаю двумерный массив из которого делаю таблицу, но в ячейке массива может быть html который отработает при вставке в таблицу.
Я понимаю, мне это и надо нужно в тексте заменять искомое значение только вне тега.
Илья
несовсем
Илья
тебе верно подсказали что это нужно делать до отрисовки, но делать опятьже с помощью регулярки
Maksym
Ну вот есть текст
текст текст текст текст текст 0 текст текст текст 0 <span a="0">текст текст </span> текст ...
Я по нему ищу регуляку /0/gi, ноль в качестве примера, может быть что угодно.
А затем заменить 0, то есть обернуть искомое значение в span который как
бы выделяем найденное значение.
td_val.replace(query, `<span class="highlight">$&</span>`);где
td_val - это текст ячейки ( тот что выше)
query - это 0, то есть искомое значение
Maksym
Но если выполнить этот replace, он заменит и тот ноль что в тексте внутри тега, и получиться касяк.
Илья
тебе регулярку уточни нужно
Илья
я в реглярках не силен так что не помогу в ее написании
Maksym
Ну, я силен, я сам напишу регулярку.
Проблема в том, что я получаю запрос пользователя, делаю из него регулярку выполняю поиск, а после мне нужно модифицировать регулярку для того чтобы исключить случаи где искомое значение внутри тега.
Я не догоняю как мне модифицировать регулярку
Maksym
Так можно довольно точно определить тег <\/?[A-Za-z]+[^>]*>
Anonymous
Maksym
Не понял ?
Anonymous
Anonymous
просто не понятно, куда регулярка
Maksym
Нужно сделать это.
То есть:
Пользователь ввел запрос в поле для поиска.
Я по этому запросу ищу в данных таблицы соответствия.
Затем эти соответствия оборачиваю тегом.
Таким образом как бы выделяю найденное значение для пользователя.
Maksym
Ну вот есть текст
текст текст текст текст текст 0 текст текст текст 0 <span a="0">текст текст </span> текст ...
Я по нему ищу регуляку /0/gi, ноль в качестве примера, может быть что угодно.
А затем заменить 0, то есть обернуть искомое значение в span который как
бы выделяем найденное значение.
td_val.replace(query, `<span class="highlight">$&</span>`);где
td_val - это текст ячейки ( тот что выше)
query - это 0, то есть искомое значение
Maksym
Но если выполнить этот replace, он заменит и тот ноль что в тексте внутри тега, и получиться касяк.
Anonymous
Anonymous
ну ни как это не сделать регуляркам(правильно(
Anonymous
надо востанавливать дерево
Anonymous
и искать уже в нем
Anonymous
Anonymous
?
Maksym
Нет там текст, просте в тексте бывает html, который при построении таблицы отработает
Anonymous
Maksym
Верно
Anonymous
я бы тогда после получения сырова списка, удалил бы все html Теги, и профильтровал его еще раз регуляркой, уже по тексту
Maksym
Ладно, разберусь есть другой вопрос.
У меня есть строка:
Моя прекрасная строка.У меня есть регулярка /прекрасная/gi.
Как мне определить положение первого и последнего символа в строке применив регулярку?
Maksym
А как потом вернуть html на место ?
Anonymous
Anonymous
вроде можно
Anonymous
в php точно можно
Maksym
А можно подробнее.
Вот есть строка с тегами
Моя <b>прекрасная</b> строка.
А вот есть без тегов
Моя прекрасная строка.
Как мне в строку без тегов добавить теги из первой строки в тоже место ?
Maksym
Типо основной поиск по бд, а после еще раз но уже по найденным значениям (после вставки их в html)?
Anonymous
Deleted
Maksym
Anonymous
Anonymous
но, можно заморочится... там поменять теги, на какиенить редкие utf символы
Maksym
Maksym
думаю так {{val1}} это для первого найденного тега, потом {{val2}} для второго и тд.
Maksym
Думаете так норм будет ?
Anonymous
Anonymous
а почему именно регулярка?
Anonymous
почему не вхождение текста не искать
Maksym
Хотя вариант который мне нравиться еще больше, так это пройтись по тексту, выдернуть все html занести их в массив, запомнить положение в строке.
А после вернуть на тоже место.
Maksym
Потому что у пользователя есть возможность вводить регулярные выражения в качестве поиска
Maksym
Maksym
нужно просто обернуть тегами то что пользователь в регулярке впишет
Anonymous
Maksym
да
Maksym
хотя не всегда, но по умолчанию да
Maksym
Это 2 разные задачи, но чую решение одно
Anonymous
Anonymous
использовать exec
Anonymous
то есть
Anonymous
`let r = /прекрасная/gi`
Anonymous
let s = "Моя прекрасная строка "
Anonymous
`let r = null;
while(r = re.exec(s)) { console.log(r) }`
Maksym
Я вижу решение таким пройтись по строке найти все html запомнить положение, удалить html.
Выполнить поиск.
Вернуть на место html в нужное место.
Anonymous
вот как кароче
Maksym
Но есть нюанс мне не понятно, после удаления html положение то измениться