Ich möchte eine Regex-Matching-Funktion in Javascript implementieren, die mit einem oder mehreren Keywords in einem Text übereinstimmt. Jedes Schlüsselwort muss in beliebiger Reihenfolge gefunden werden. Schlüsselwörter werden vom Benutzer eingegeben.Regex Keyword-Matching
Hier ist, wo ich bin:
\b(smart.*\bwork.*|work.*\bsmart.*)
- Streichhölzer
"trying to work smarter"
- aber nicht
"trying to work" or "trying to be smart"
Das Problem bei diesem Ansatz ist, ich verschiedene erstellen müssen Permutationen geordnet (so ähnlich sowieso) des Keyword-Sets.
So sind die Fragen:
- Wenn es eine einfache RegEx-einzige Weg? (Ie
"\b(smart.*|work.*)<magic:all,anyorder>"
was wird sicherstellen, dass alle Suchbegriffe gefunden werden, und in beliebiger Reihenfolge) - Wenn nicht - Können Sie eine JavaScript-Implementierung von Array Permutationen (so dass aus
[1,2,3]
es erzeugt[[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]
)
UPDATE
Dies ist für die Suche nach einer Reihe von Zeichenfolgen (10-50 Zeichenfolgen) auf der Clientseite (im Browser) vorgesehen.
Ich würde Regex nicht empfehlen, wenn es um "diese Schlüsselwörter in beliebiger Reihenfolge mit interlaced acceptables" geht. Ich würde 'indexOf()' für jedes Keyword empfehlen; es würde viel weniger kosten als die potentiell komplexe Regex. – BeemerGuy
Es ist schwer zu verstehen, was Sie zu tun versuchen. Das ist nicht irgendein Spam-Randomizer, oder? –
Ihre zweite Option klingt wie ein Performance-Albtraum, wenn Sie sie verwenden, um eine Reihe von RegExs zu generieren und sie alle zu testen. –