Sto provando a creare una funzione di ricerca per un progetto che restringe gli elementi in base a un input di ricerca utente e se corrisponde alle parole chiave elencate rispetto agli elementi. Per questo, sto salvando le parole chiave dell'articolo in un attributo data
e facendo corrispondere la query con queste parole chiave utilizzando un modello RegExp.Espressione regolare per TUTTE le parole in una query, in qualsiasi ordine
Attualmente sto usando questa espressione, che so non è corretto e bisogno del vostro aiuto su questo:
new RegExp('\\b(' + query + ')', 'gi')))
dove query viene |
valori separati della query immessa dall'utente (ad esempio \\b(meat|pasta|dinner)
). Questo mi restituisce una partita, anche se c'è solo 1 partita, diciamo per esempio - meat
solo per gettare un po 'di contesto, ecco un piccolo esempio:
Se un utente digita: meat pasta dinner
dovrebbe elencare tutti gli elementi che hanno TUTTE le 3 parole chiave elencate contro di esse, ad esempio meat
pasta
e dinner
. Questi sono indipendenti dall'ordine in cui sono stati digitati.
Puoi aiutarmi con un'espressione che corrisponderà a TUTTE le parole in una query, in qualsiasi ordine?
Umm, non esattamente - Devo abbinare l'intero input dell'utente con le parole chiave rispetto agli oggetti e restituire solo true se l'intero input corrisponde alle parole chiave su quegli elementi. – kayen
Fondamentalmente ho bisogno di venire con un'espressione AND che AND l'utente input 'e.g. torta a base di carne e confronto con le parole chiave 'ad es. Torta semplice di kebab continentale della carne della pasta '. In questo caso, l'espressione fallirà poiché la parola chiave contiene 'carne' e' torta' ma non 'cena'. – kayen
Perché non usi un semplice metodo 'stringa' per questo? Voglio dire, se non ci sono parole chiave ripetute, allora questo può essere raggiunto facilmente con Regex.Ma con parole chiave ripetute, è meglio evitare Regex qui. Basta usare la funzione 'indexOf' con un ciclo for. Oppure, potrebbe essere una funzione String migliore, di cui potrei non essere a conoscenza. –