Я создаю небольшой поисковик, и для этого мне нужна система запросов фраз.Я ищу хорошее решение для его решения.
Допустим, у нас есть следующие запросы:
[
"Hello",
"Hello AND World",
"Hello OR !World",
"(!Hello AND World) OR (foo AND bar)"
]
Я бы искал термины в моей базе данных и затем пересек / объединил/ не т. д. им.Но проблема в том, чтобы найти хорошую функцию, которая запрашивает их.
Мой первый подход был с объединением строк, поиском и т. Д., Это работает, если шаблон не сильно меняется.Но я хочу разработать рекурсивную функцию, выполняющую весь синтаксический анализ, но, к сожалению, я отстой от рекурсивных функций и надеюсь, что вы мне поможете.
function regExingBrackets(s) {
let res = [];
let re = /\((.*?)\)/gm;
let m;
while (m = re.exec(s)) {
res.push(m[1]);
}
return res;
}
function parseQuery(str) {
let andorparser = /(.+)\s(OR|AND)\s(.+)/gm
let res = andorparser.exec(str);
// res[1] first term, 2 -> OR / AND, 3 -> second term
}
Эти функции должны быть как-то связаны, и это должносначала идти по пути вниз, как начинать с! Hello (получить все элементы в базе данных, кроме hello), его результата И с World (получить все элементы World и пересечь их), а также И с двумя другими словами и их результатамиИЛИ.
Итак, в рекурсивной функции одновременно выполняется синтаксический анализ и использование функции>. <</p>
Что было бы хорошим решением для этой проблемы?Я очень рад и благодарен за вашу помощь!
С уважением, TehEbil