2017-02-22 52 views
0

мне нужно создать правило регулярного выражения для соответствия такого рода строк (смотрение буквы «а»):Regex чтобы соответствовать, если он содержит то же символы 0 или 2 или 4 раза рядом друг с другом

  • аа
  • аааа
  • ААББ
  • aaaagg
  • cccaazz
  • dddaaaazz

но не:

  • ааа
  • ааааа
  • АВВ
  • bbbaaa
  • bbaazza

Пробовал с [a]{2}|[a]{4}, но это не работает. Есть идеи?

+1

насчет 'aabba'? 'Aabbaa'? 'Abbaa'? 'Aaaaaa'? – kennytm

+0

Нет, 'a' может быть 0 или 2 или 4 раза рядом друг с другом. Он не может быть разделен никакими другими вещами. – Nosenation

+1

Почему этот 'cccaazz' (три символа' c') действителен, а 'abb' - не в ваших примерах? – RomanPerekhrest

ответ

3
/^[^a]*(?:aa){0,2}[^a]*$/ 
  1. Нам нужно ^ и $, чтобы соответствовать всей строке.
  2. [^a]* соответствует любому количеству не a s. Это гарантирует, что только средняя часть содержит a s.
  3. (?:aa){0,2} соответствует нулю aas (= empty), один aa (= aa) или два aas (= aaaa).

>>> ['aa', 'aaaa', 'aabb', 'aaaagg', 'cccaazz', 'dddaaaazz', 'aaa', 'aaaaa', 'abb', 'bbbaaa', 'bbaazza'] 
    .map(c => `${c}: ${/^[^a]*(?:aa){0,2}[^a]*$/.test(c)}`).join('\n') 
"aa: true 
aaaa: true 
aabb: true 
aaaagg: true 
cccaazz: true 
dddaaaazz: true 
aaa: false 
aaaaa: false 
abb: false 
bbbaaa: false 
bbaazza: false" 
+0

Почти, все еще не работает. Строка может быть только 'a' или' aabb' или 'ccaaaa' – Nosenation

+0

@Nosenation Не является ли' 'несоответствующим случаем? Он содержит только один 'a'. 'aabb' и' ccaaaa' работает для этого регулярного выражения. – kennytm

+0

Да, я имею в виду, что он может начинаться с 'aa' или заканчиваться' aa'. Пробовал регулярное выражение, но не совпадал. Это слишком много. Ссылка: https://regex101.com/r/4dQbJz/1 – Nosenation