2016-04-20 8 views
1

Есть ли способ включить оператор if в регулярное выражение в javascript. Такого рода вещи:Regex with if statement

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

так:

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

Я надеюсь, что это имеет смысл.

Заранее спасибо

+0

** Да. ** Но это только два символа? –

ответ

2

не совсем if, но чередование и смотреть вперед это то, что вам нужно в этом случае:

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

Работает example.

0

Ближайший эквивалент if в регулярном выражении является чередованием, |, где регулярное выражение будет соответствовать, насколько это возможно в филиале чередования, и попытаться соответствовать следующей (s), если он терпит неудачу.

Чтобы запрограммировать ваш точный оператор в регулярном выражении, можно использовать (?=.[0-9])[a-m]|[n-z], где вы используете lookahead для проверки состояния.

Однако вы можете использовать это гораздо более простое регулярное выражение:

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

Я почти уверен, что OP давал пример с этой маленькой вещью 2 char –

+1

Ну, он может использовать решение lookahead в любом контексте: проверить с помощью lookahead, соответствовать тому, что вы хотите, чередовать, чтобы указать блок «else». Однако я не думаю, что вы должны так думать в регулярном выражении, это не поможет вам – Aaron

1

Вы должны были бы это:

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

Или, если это полный алфавитов, то:

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

Для данного ввода он дает:

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

Забронируйте онлайн по адресу RegEx 101.

Работа

Объяснение