У меня проблема с Angular / Typescript, но его можно применить на большинстве языков программирования.
У меня есть огромный текст, который мы назовем fulltext и набор фильтров , которые применяются к полному тексту и знают, совпадают ли они; позвольте мне объяснить лучше:
предположим, что наш полный текст выглядит примерно так
«Здравствуйте! Меня зовут Маттиа»
и фильтры
[«меня зовут», «это Маттиа»]
Прежде всего, я выполняю операцию заикания и очистки полного текста и фильтров, применяя регулярное выражение и заменяю .
document.snippet.toLowerCase().replace(/[^A-Z0-9]/ig, "");
filter.toLowerCase().replace(/[^A-Z0-9]/ig, "");
Так что теперь я могу избежать различных ложных срабатываний, таких как несоответствие между «Mattia» и «mattia» и т. Д. c ...
На этом этапе ответ может быть следующим: тривиально: я просто прокручиваю список фильтров и использую строковый метод "include". Но предположим, что у вас есть «mat» вместо «mattia» в качестве фильтра. Include использует подстроку, поэтому в любом случае вернет true.
В моем контексте у меня есть некоторые объекты, называемые «секциями», пронумерованные до латинского алфавита c нумерация (i, ii, iii, ...) содержится в полном тексте. Таким образом, если применяется фильтр «section i», рассматриваемый метод должен возвращать false, если присутствует «... section ii ...», «... section iii ...».
I почти забыл, все фильтры должны быть удовлетворены, поэтому, если хотя бы один из них не соответствует, метод должен возвращать false.
Надеюсь, я прояснил проблему, насколько могу.