Próbuję utworzyć funkcję wyszukiwania dla projektu, który zawęża elementy na podstawie danych wprowadzonych przez użytkownika i jeśli pasuje do słów kluczowych wymienionych w odniesieniu do elementów. W tym celu zapisuję słowa kluczowe przedmiotu w atrybucie data
i dopasowuję zapytanie do tych słów kluczowych, używając wzorca RegExp.Wyrażenie regularne, aby dopasować WSZYSTKIE wyrazy w zapytaniu, w dowolnej kolejności
obecnie używam tego wyrażenia, które znam nie jest poprawna i potrzebują twojej pomocy na ten temat:
new RegExp('\\b(' + query + ')', 'gi')))
gdzie zapytania |
oddzielone wartości zapytania wprowadzone przez użytkownika (np \\b(meat|pasta|dinner)
). To powraca do mnie mecz, nawet jeśli jest tylko 1 mecz, powiedzmy na przykład - meat
Wystarczy rzucić pewien kontekst, oto mały przykład:
Jeśli użytkownik wpisze: meat pasta dinner
należy wymienić wszystkie elementy, które mają WSZYSTKIE 3 słowa kluczowe wymieniane przeciwko nim, tj. meat
pasta
i dinner
. Są one niezależne od kolejności, w jakiej zostały wpisane.
Czy możesz mi pomóc z wyrażeniem, które dopasuje WSZYSTKIE słowa w zapytaniu, w dowolnej kolejności?
Umm, nie do końca - Muszę dopasować cały tekst wprowadzany przez użytkownika ze słowami kluczowymi do elementów i zwracać wartość true, jeśli całe wejście pasuje do słów kluczowych tych elementów. – kayen
Zasadniczo muszę wymyślić wyrażenie AND, które będzie ORAZ użytkownik wprowadził 'np. kolację z mięsem "i sprawdzić pod kątem słów kluczowych" np. Makaron kebabu mięsnego mięsnego kontynentalnego pasztetowy prosty '. W tym przypadku wyrażenie nie powiedzie się, ponieważ słowo kluczowe zawiera "mięso" i "ciasto", ale nie "obiad". – kayen
Dlaczego nie używasz prostej metody 'string'? Chodzi mi o to, że jeśli nie ma powtarzających się słów kluczowych, to można to łatwo osiągnąć dzięki Regexowi.Ale z powtarzającymi się słowami kluczowymi, lepiej unikać Regex tutaj. Po prostu użyj funkcji 'indexOf' z pętlą for. Lub może być lepszą funkcją String, której być może nie jestem świadomy. –