@toha_man

Как работает данное регулярное выражение?

Есть такая регулярка
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{6,}$

она проверяет инпут на следующие условия:
1. длина от 6 символов
2. наличие обязательно прописных + строчных + чисел от 0-9 одновременно.

используется (?=) lookahead и вот тут у меня конфуз. не понимаю каким образом это работает. То есть, я знаю, зачем lookahead - для /abc(?=daddy)/ будет найдено совпадение в abcdaddy строке , и не найдено в abc4daddy. Для меня по логике перед loohahead должны быть символы , но здесь идет 3 группы до базового паттерна [a-zA-Z0-9]{6,}.

Ведь (?=) смотрит вперед , а не назад.

И второй вопрос. Почему этот регэксп работает в случае если меняешь местами такие символы:
abC123, Cab123, 123Cab - то есть порядок прописных строчных и цифр не важен, но ведь группы lookahead идут по порядку

Спасибо
  • Вопрос задан
  • 501 просмотр
Решения вопроса 1
lidacriss
@lidacriss
wtf
Для меня по логике перед loohahead должны быть символы

ну будем считать, что там есть "символ" )
"начало строки" ^
3 "смотрящих вперед": (?=.*\d)(?=.*[a-z])(?=.*[A-Z])
(?=.*\d) - обязательно впереди от начала строки должна быть хотябы 1 цифра, не важно в каком именно месте
т.е. сперва идет .*, где . - любой символ и и квантор * 0 или "много" раз, а потом цифра \d
следующее вперед смотрящее
(?=.*[a-z]) - обязательно 1 маленькая буква латинского алфавита
(?=.*[A-Z]) - обязательно 1 большая буква латинского алфавита

И второй вопрос. Почему этот регэксп работает в случае если меняешь местами такие символы:
abC123, Cab123, 123Cab - то есть порядок прописных строчных и цифр не важен, но ведь группы lookahead идут по порядку

тут "смотрящее вперед" идет просто от начала, порядок не важен
оно больше как проверка наличия того или иного символа

https://regex101.com/r/IcUFYB/1
здесь все смотрящие проверяют наличие (?=.*\d)(?=.*[a-z])(?=.*[A-Z]) после слова пример-
если там есть слово "пример-", то в таком случае вас не будет смущать регулярка? :)

п.с. в свое время очень не мог вникнуть в эти все "смотрящие вперед/назад"
п.п.с очень хорошо с регулярками, кончено, разбираться на готовых примерах, в особенности когда есть такие онлайн-инструменты как https://regex101.com
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы