2016-04-20 5 views
1

Gibt es eine Möglichkeit, eine if-Anweisung in einen regulären Ausdruck in Javascript einzufügen. Diese Art der Sache:Regex mit if-Anweisung

var regex = /"if followed by [0-9] then match [a-m], else match [n-z]"/i 

so:

"a9" //returns a match 
"aa" //doesn't return a match 
"na" //returns a match 

Ich hoffe, das macht Sinn.

Vielen Dank im Voraus

+0

** Ja. ** Aber sind es nur zwei Zeichen? –

Antwort

2

Nicht gerade ein if, sondern ein Wechsel und vorausschauend sind, was Sie in diesem Fall benötigen:

([a-m](?=[0-9])|[n-z](?![0-9])) 

Hier ist eine funktionierende example.

0

Die nächste entspricht if in regex ist der Wechsel, |, wo der Regex so weit wie es in einem Zweig des Wechsels kann, und versuchen Sie, um mit dem nächsten Übereinstimmen (s) wenn es fehlschlägt.

Um Ihre genaue Aussage in Regex zu kodieren, würde man (?=.[0-9])[a-m]|[n-z] verwenden, wo Sie Lookahead verwenden, um den Zustand zu überprüfen.

auch immer Sie diese viel einfacher Regex verwenden können:

[a-m][0-9]|[n-z] 
+0

Ich bin mir ziemlich sicher, OP gab ein Beispiel mit diesem kleinen 2 Char Ding –

+1

Nun kann er die Lookahead Lösung in jedem Kontext verwenden: mit Lookahead überprüfen, passen Sie, was Sie wollen, alternativ einen "else" -Block angeben. Aber ich denke nicht, dass du in Regex so denken solltest, es wird dir nicht viel helfen – Aaron

1

Sie würden dies benötigen:

([a-m][0-9])|([n-z][a-m]) 

Oder, wenn das voll von Alphabeten ist, dann gilt:

([a-m][0-9])|([n-z][a-z]) 

Für die gegebene Eingabe gibt es:

MATCH 1 
1. `a9` 
MATCH 2 
2. `na` 

Überprüfen Sie online unter RegEx 101.

Arbeiten

Erklärung