Javascript regex-Muster passen mehrere strings ( UND, ODER ) gegen einzelne Zeichenfolge
Brauche ich zum filtern einer Auflistung von Zeichenfolgen basiert auf einem Recht komplexen Abfrage - in seiner "rohen" form sieht es wie folgt aus:
nano* AND (regulat* OR *toxic* OR ((risk OR hazard) AND (exposure OR release)) )
Ein Beispiel für eine der Zeichenfolgen zu entsprechen, gegen:
Workshop on the Second Regulatory Review on Nanomaterials, 30 January 2013, Brussels
So, ich muss mit UND, ODER und wildcard-Zeichen - also, vermute ich, werde ich brauchen, um verwenden Sie einen regulären Ausdruck in JavaScript.
Ich es haben alle looping-richtig filtern und in der Regel arbeiten, aber ich bin mir 100% sicher, dass meine regex falsch ist - und einige Ergebnisse werden ausgelassen falsch - hier ist es:
/(nano[a-zA-Z])?(regulat[a-zA-Z]|[a-zA-Z]toxic[a-zA-Z]|((risk|hazard)*(exposure|release)))/i
Jede Hilfe wäre sehr geschätzt - ich kann wirklich nicht Abstrakt, meine Gedanken richtig zu verstehen, diese syntax!
UPDATE:
Nur wenige Menschen sind darauf aus, die Bedeutung der Reihenfolge, in der die regex aufgebaut ist, aber ich habe keine Kontrolle über die text-strings, die durchsucht werden, also muss ich eine Lösung finden, die arbeiten können unabhängig von der Reihenfolge, oder entweder.
UPDATE:
Schließlich verwendet eine PHP-Lösung, durch Streichung von der twitter-API 1.0, siehe pastebin zum Beispiel die Funktion ( ich weiß, es ist besser zum einfügen von code hier, aber es ist eine Menge... ):
Funktion: http://pastebin.com/MpWSGtHK
Verwendung: http://pastebin.com/pP2AHEvk
Vielen Dank für alle Hilfe
In deinem Beispiel-string, 'nano' kommt nach 'regulatorischen', aber in deinem regex, ist es genau Umgekehrt. Gibt es eine erwartete Muster in diesem, so dass einer immer vor den anderen? Ein paar mehr Beispiele würden helfen, erklären Ihre Anforderung.
gute Beratung, das ist, wie ich so weit gekommen
die Saiten, ich bin ein Abgleich mit anfangs wurden tweets, die von diesem feed: twitter.com/nanoTOES - also, es gibt keine Ordnung, wir versuchen nur um die Anzahl zu reduzieren und erhöhen die Relevanz.
Studio: ich fürchte, du musst mit mehreren wenn-Bedingungen mit & ODER, anstatt zu versuchen zu passen, alles in einer einzigen regex in diesem Fall.
InformationsquelleAutor Q Studio | 2013-02-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einem einzigen regex ist nicht das richtige Werkzeug für diese, IMO:
würde True zurückgeben, wenn der string erfüllt die Kriterien, die Sie festgelegt ist, aber ich finde verschachtelte lookaheads ganz unverständlich. Wenn JavaScript unterstützt, kommentierte regexes, würde es so Aussehen:
Beachten Sie, dass der gesamte regex besteht aus lookahead-Behauptungen, so das Ergebnis selbst, wird immer der leere string.
Stattdessen könnten Sie einzelne regexes:
bitte erklären Sie den [\b] - ich habe gelesen, dass "\b ist ein backspace-Zeichen" aber ich bin nicht sicher, wie das relevant ist?
In einem normalen string,
"\b"
ist in der Tat ein backspace-Zeichen. In einem regex -/\b/
(entsprichtnew Regex("\\b")
) ist ein Wort-Grenze Anker. Dieser Anker passt am Anfang oder Ende eines alphanumerischen Wort. Daher/\brisk\b/
nur Spiele"risk"
oder"There is a risk!"
, aber nicht"brisk"
oder"risky"
.danke für die Erklärung - ich habe es verschoben, Weg von wenn javascript, da die version 1.0 der API wird heruntergefahren, aber die regexes sollte funktionieren fast wie im PHP-denke ich - werde ich eine komplette Antwort, wenn ich habe alles behoben.
InformationsquelleAutor Tim Pietzcker
Regulären Ausdrücken zu bewegen, die durch den string um. Sie haben "nano" vor "regulat" in dem Muster, aber Sie sind ausgelagert in die test-string. Statt mit regexen um dies zu tun, würd ich mich mit plain old string Parsen:
Wenn Sie wollen, um tatsächlich erfassen der Wörter (z.B. get "Ordnungspolitischen" von wo "regulat" ist, würde ich split den Satz durch Wort bricht und prüfen einzelner Wörter.
mein Vorschlag unpassend für?
ja, sorry - Ihre Lösung löst die Bestellung problem.. aber kann ich immer noch verwenden Sie Platzhalterzeichen ( * ) Zeichen in ein normales JS-Suche?
Ich müssen zu entsprechen nano* ( zB. Nanotechnologie ) und regulat*, (zB. Verordnung )
indexOf
arbeiten mit Zeichensätzen keine Worte .. so"nanotechnology".indexOf('nano')
zurück0
(die größer ist als-1
)InformationsquelleAutor Explosion Pills