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
Deleted
Anonymous
Maksym
Сморю еще
Anonymous
Maksym
Я правильно понял, мы загоняем весь объем данных из бд, верно?
Это по сути полноценная функция фильтрации и выделением ?
Anonymous
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
Понял
Anonymous
Maksym
а 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 ?
Anonymous
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
А можно ли подправить чтобы загонять туда туда текст для одной ячейки?
Anonymous
Maksym
тобиш на входе не массив объектов а просто текст
Maksym
сразу встрою в прогу поглядим на скорость работы, а по логике вроде все гуд как надо
Anonymous
Maksym
getResult() {
const {text, pattern} = this;
return this.process(text, pattern);
}
так ?
Anonymous
https://pastebin.com/ftNZBhf8
Anonymous
откуда ему там взяться
Anonymous
&gt
Anonymous
там будет, сам же неписал
Deleted
https://jsbin.com/cateqil/edit?js,console,output
Deleted
@Stomaks готово
Anonymous
ну да
Deleted
С рабочим примером подсветки искомого текста @Stomaks
Alyona
Если язык позволяет это делать и делать это просто и эффективно, в ряде случаев, почему бы и не дебажить так?
Maksym
Maksym
ну да
throw new Error("Not found");
Выдает в случае если нет искомого значения ?
Anonymous
Maksym
Maksym
Красота !!!
Maksym
Сейчас проверю
Maksym
Что ж на 5000 строках и 8 столбцах, ищет от секунды до 5 секунд.
Можно считать это успехом.
Maksym
да
Решение рабочее, спасибо!
Работает быстро и как надо.
Maksym
Теперь посмотрю второе решение.
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
и введи пагинацию серверную
Anonymous
и все
Anonymous
Anonymous
как я понял