Илья
других способов нет
Roman
не парсите хтмл регулярками
☕️
Смотри на открывающий и закрывающий тег
Maksym
Верно, но уменя обработка массива с более 200 000 текстовых строк. Если я каждую буду превращать в DOM. Я повисну на вечно.
Roman
https://stackoverflow.com/a/1732454/1268907
Maksym
Хахах помните !)) Да верно, я примени все рекомендации что мне тут подсказали. и я увеличил скорость поиска с двух минут до 1 секунды. И за это всем Огромное СПАСИБО. Но теперь у меня встал вопрос, я хочу выделить искомое значение в таблице.
Maksym
☕️
А зачем парсить хтмл для этого ? У тебя же есть где-то массив данных которые ты рендеришь
Maksym
Все верно, просто в некоторых ячейках есть кастомные html теги
Maksym
Maksym
Видите в последней ячейке кнопка, которая есть для каждой строки.
Илья
Все верно, просто в некоторых ячейках есть кастомные html теги
ты табличку сам сздаешь из тех данных что у тебя есть ? или что вообще происходит у тебя ?
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]+[^>]*>
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
и искать уже в нем
Maksym
надо востанавливать дерево
слишком много ячеек в таблице, долго будет работать
Anonymous
?
Maksym
Нет там текст, просте в тексте бывает html, который при построении таблицы отработает
Maksym
Верно
Anonymous
я бы тогда после получения сырова списка, удалил бы все html Теги, и профильтровал его еще раз регуляркой, уже по тексту
Maksym
Ладно, разберусь есть другой вопрос. У меня есть строка: Моя прекрасная строка.У меня есть регулярка /прекрасная/gi. Как мне определить положение первого и последнего символа в строке применив регулярку?
Maksym
А как потом вернуть html на место ?
Anonymous
А как потом вернуть html на место ?
ну, блин. Поралельной держать изначальный список, и на основе отфильтрованного востановить
Anonymous
вроде можно
Anonymous
в php точно можно
Maksym
А можно подробнее. Вот есть строка с тегами Моя <b>прекрасная</b> строка. А вот есть без тегов Моя прекрасная строка. Как мне в строку без тегов добавить теги из первой строки в тоже место ?
Maksym
Типо основной поиск по бд, а после еще раз но уже по найденным значениям (после вставки их в html)?
Anonymous
А можно подробнее. Вот есть строка с тегами Моя <b>прекрасная</b> строка. А вот есть без тегов Моя прекрасная строка. Как мне в строку без тегов добавить теги из первой строки в тоже место ?
ни как. Я имел ввиду, что ты создаешь второй список, в ячейках которого есть ссылка на оригинальный html. Фильтруешь его , и по результату востанавливаешь из оригинального Html листа
Anonymous
но, можно заморочится... там поменять теги, на какиенить редкие utf символы
Maksym
думаю так {{val1}} это для первого найденного тега, потом {{val2}} для второго и тд.
Maksym
Думаете так норм будет ?
Anonymous
а почему именно регулярка?
Anonymous
почему не вхождение текста не искать
Maksym
Хотя вариант который мне нравиться еще больше, так это пройтись по тексту, выдернуть все html занести их в массив, запомнить положение в строке. А после вернуть на тоже место.
Maksym
Потому что у пользователя есть возможность вводить регулярные выражения в качестве поиска
Maksym
нужно просто обернуть тегами то что пользователь в регулярке впишет
Maksym
да
Maksym
хотя не всегда, но по умолчанию да
Maksym
Это 2 разные задачи, но чую решение одно
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 положение то измениться