2016-05-12 21 views
0

Ich habe diese Saite:Regex erhält Text vor und nach einem Bindestrich

"Common Waxbill - Estrilda astrild" 

Wie kann ich schreiben 2 separaten reguläre Ausdrücke für die Worte vor und nach dem Bindestrich? Der Ausgang Ich möchte ist:

"Common Waxbill" 

und

"Estrilda astrild" 
+1

Warum teilen Sie die Zeichenfolge mit Bindestrich als Trennzeichen? Keine Notwendigkeit für Regex. –

+0

Was möchten Sie erreichen? –

Antwort

2

Wenn Sie nicht Look-behinds verwenden, aber die Zeichenfolge ist immer im gleichen Format und cannout mehr als der einzelne Bindestrich enthalten, Sie

^[^-]*[^ -] für die ersten und \w[^-]*$ für die zweiten verwenden könnten (oder [^ -][^-]*$, wenn der erste nicht-Raum nach dem Bindestrich nicht unbedingt ist Wort-Zeichen

ein bisschen Erklärung:. ^[^-]*[^ -] stimmt mit dem Anfang des Strings (Anker ^), um ein beliebigen Menge von Zeichen folgen, das ist kein Bindestrich und schließlich ein Zeichen, das kein Bindestrich oder Leerzeichen ist (nur um e xclude das letzte Leerzeichen aus dem Spiel).

[^ -][^-]*$ nimmt den gleichen Ansatz, aber umgekehrt, zuerst ein Zeichen das ist, um eine beliebige Menge von Zeichen weder Raum noch Bindestrich, gefolgt einstimmt, daß kein Bindestrich sind und schließlich das Ende der Schnur (Anker $). \w[^-]*$ ist im Grunde das gleiche, es verwendet eine strengere \w anstelle der [^ -]. Dies wird wieder verwendet, um das Leerzeichen nach dem Bindestrich aus dem Match auszuschließen.

+0

Das funktioniert für mich. Können Sie mir erklären, wie das [^ -] [^ -] funktioniert? –

+1

Neugierig wie es funktionieren könnte, da es im ersten einen (leichten) Fehler gab. Eine Erklärung hinzugefügt. –

4

Das ist ganz einfach:

.*(?= -)  # matches everything before " - " 
(?<= -).* # matches everything after " - " 

dieses Tutorial finden Sie auf lookaround assertions.

+0

Wenn ich den Code für die Zuordnung aller verwendet habe, nachdem ich diesen Fehler erhalten: SyntaxError: Ungültiger regulärer Ausdruck:/(? <= -). * /: Ungültige Gruppe. Ich verwende den Chrome Extension Web Scraper, der js für seine Regex verwendet. –

+3

Javascript hat keine Lookbehinds. –

Verwandte Themen