Anonymous
блин
Anonymous
https://pastebin.com/MPvTz37a
Anonymous
из Моя прекрасная строка. <span a="0">Супер строка внтури.</span> Супер строка. кек мы получаем Моя прекрасная <span class="select-substr">строка</span>. <span a="0">Супер <span class="select-substr">строка</span> внтури.</span> Супер <span class="select-substr">строка</span>. кек
Anonymous
из более сложного Строка. Еще строки. <b>dd</b>Строка 3<b>dd</b><b>dd</b>. Уникальная стро<span a="0">ка</span> ... мы получаем <span class="select-substr">Строка</span>. Еще строки. <b>dd</b><span class="select-substr">Строка</span> 3<b>dd</b><b>dd</b>. Уникальная <span class="select-substr">стро</span><span a="0"><span class="select-substr">ка</span></span> ...
Money
Здравствуйте уважаемые подписчики. Ищу Android программиста. Есть тут такие?
Deleted
@Stomaks https://jsbin.com/cateqil/edit?js,console
Anonymous
но! могут быть ошибки, я не проверял толком
Deleted
В данном примере получил тот самый массив подсказок
Deleted
Сейчас покажу как с помощью него выделять HTML
Maksym
https://pastebin.com/MPvTz37a
Спасибо, а можно немного комментариев в код, сложно разобраться
Maksym
@Stomaks https://jsbin.com/cateqil/edit?js,console
Не совсем понятно что мне с этим дальше делать
Maksym
Сморю еще
Maksym
https://pastebin.com/MPvTz37a
Реализация для меня сложновата, но идея примерно такая же как я думал. Спасибо, буду разбираться.
Maksym
Я правильно понял, мы загоняем весь объем данных из бд, верно? Это по сути полноценная функция фильтрации и выделением ?
Anonymous
вы регуляркой прошлись по дб
Anonymous
и вот дальше результат
Anonymous
уже
Anonymous
я не знаю в каком у вас там формате
Anonymous
я взял такой
Anonymous
const inputArrayFromDB = [ {id: 0, text: "Моя прекрасная строка. <span a=\"0\">Супер строка внтури.</span> Супер строка. кек"}, {id: 1, text: " Строка. Еще строки. <b>dd</b>Строка 3<b>dd</b><b>dd</b>. Уникальная стро<span a=\"0\">ка</span> ..."}, ];
Maksym
Понял
Maksym
а id как-то используется, что-то я не вижу
Anonymous
а id как-то используется, что-то я не вижу
нет ни как. Я просто его привел, т.к. у вас же кака я то связь должна же быть с остальными столбцами
Maksym
Да верно
Anonymous
там используется свойство text, и создается новое свойсво newText. Все
Anonymous
алгоритм работы примерно такой. Удаляются все html теги, с запоминанием тега и его смещения. const htmlTagsArray = []; const text = html.replace(/\<[^]+?\>/g, (tag, index) => htmlTagsArray.push({tag, index}) && "" ); По получившемуся тексту, проходим регуляркой, запоминая все совпадения, их смещение и длинну. const matchArray = []; for(let match; match = rg.exec(text); ) { matchArray.push({index: match.index, match: match[0], length: match[0].length}); } Далее мы создаем массив`selectArray`, в итемах которого у нас смещение и длинна. Они показывают места в html которые надо обернуть в html тег выделяющий текст. Далее проходим по всем местам и обарачиваем let newHtml = ""; let prev = 0; for(const select of selectArray) { newHtml += html.substr(prev, select[0] - prev); prev = select[0] + select[1]; newHtml += callback( html.substr(select[0], select[1]) ); } newHtml += html.substr(prev);
Maksym
Можем ли мы использовать только text ?
Maksym
Ну вернуть такой же объект что и передали
Anonymous
ну да
Anonymous
замените newArray.push({...item, newText: this.process(item.text, new RegExp(pattern.pattern, pattern.flags))}); на newArray.push({...item, text: this.process(item.text, new RegExp(pattern.pattern, pattern.flags))});
Maksym
А можно ли подправить чтобы загонять туда туда текст для одной ячейки?
Maksym
тобиш на входе не массив объектов а просто текст
Maksym
сразу встрою в прогу поглядим на скорость работы, а по логике вроде все гуд как надо
Maksym
getResult() { const {text, pattern} = this; return this.process(text, pattern); } так ?
Anonymous
https://pastebin.com/ftNZBhf8
Anonymous
getResult() { const {text, pattern} = this; return this.process(text, pattern); } так ?
и тогда вот так console.log( MyFilter.textPrepare( "Моя прекрасная строка. <span a=\"0\">Супер строка внтури.</span> Супер строка. кек", new RegExp(userPattern.pattern, userPattern.flags), substr => `<span class="select-substr">${substr}</span>` ) );
Anonymous
откуда ему там взяться
Anonymous
&gt
Anonymous
там будет, сам же неписал
Deleted
https://jsbin.com/cateqil/edit?js,console,output
Deleted
@Stomaks готово
Anonymous
ну да
Deleted
С рабочим примером подсветки искомого текста @Stomaks
Alyona
Если язык позволяет это делать и делать это просто и эффективно, в ряде случаев, почему бы и не дебажить так?
Maksym
С рабочим примером подсветки искомого текста @Stomaks
Сейчас разберусь с предыдущим решением
Maksym
ну да
throw new Error("Not found"); Выдает в случае если нет искомого значения ?
Maksym
Maksym
Красота !!!
Maksym
Сейчас проверю
Maksym
Что ж на 5000 строках и 8 столбцах, ищет от секунды до 5 секунд. Можно считать это успехом.
Maksym
да
Решение рабочее, спасибо! Работает быстро и как надо.
Maksym
Теперь посмотрю второе решение.
Anonymous
Решение рабочее, спасибо! Работает быстро и как надо.
это хорошо, но надо помнить о не доупустимости > символов в данных атрибутов
Maksym
У меня только 1 атрибут который может принять title и я его сам генерирую, так что я могу экранировать этот символ
Anonymous
ну ладно тогда
Maksym
Да, щя
Maksym
Maksym
Ну вообще я вижу косячность, 0 не везде подсветил
Maksym
))
Maksym
https://jsfiddle.net/stomaks/jgexwfma/513/
Maksym
Web SQL - это для меня еще неизведанная территория :)
Maksym
Если встанет вопрос повышения скорости, я знаю куда копать :)
Anonymous
ищешь в бд
Anonymous
это в любом случае, проход по всем значениям
Anonymous
и значит у тебя, скорость будет на сервере ограничиватся
Anonymous
и введи пагинацию серверную
Anonymous
и все
Deleted
это в любом случае, проход по всем значениям
вроде есть решения для таких случаев, например: https://www.postgresql.org/docs/current/pgtrgm.html
Anonymous
как я понял