Справочник по Regex: шаблоны, которые вы действительно будете использовать повторно
Регулярные выражения упаковывают целый поисковый язык в одну строку, поэтому они кажутся загадочными, пока все части не сложатся в единое целое. Этот справочник охватывает 20 процентов синтаксиса, которые решают 80 процентов задач: поиск адресов email во вставленном тексте, проверка ввода, разбор логов и массовое переименование файлов.
1. Литералы, точка и символьные классы
Большинство символов совпадают сами с собой; точка совпадает с любым символом, кроме перевода строки. Квадратные скобки задают набор — [0-9] принимает любую цифру, [^0-9] принимает все, кроме цифры, — а сокращения вроде \d, \w и \s покрывают цифры, словесные символы и пробельные символы. Используйте явный класс вместо голой точки везде, где вы знаете, что именно там должно находиться.
2. Якоря и квантификаторы
^ привязывает к началу, а $ — к концу, поэтому ^hi совпадает только со строками, которые начинаются с hi. Добавьте + для совпадения один-и-более раз, * для ноль-и-более раз и ? для необязательности; завершающий ? после любого из них включает ленивое совпадение, которое останавливается при первой возможности, а не при последней. Жадное против ленивого — самая частая причина неожиданных совпадений.
3. Группы, альтернация и опережающие проверки
Круглые скобки группируют и захватывают — (cat|dog)s? совпадает с cat, cats, dog или dogs, — а (?:…) группирует без захвата. Опережающие проверки вроде \d+(?=px) проверяют, что идет дальше, не поглощая это, так что вы можете требовать суффикс и оставлять его на месте для следующего совпадения. Именованные группы документируют намерение для тех, кто будет читать шаблон следующим.
4. Флаги меняют все
Буквы после закрывающего слэша настраивают движок: g находит все совпадения вместо первого, i игнорирует регистр, m заставляет якоря работать построчно, s позволяет точке пересекать переводы строк, u включает полный Unicode, а y привязывает совпадение к одной позиции. Неверный набор флагов — частая причина, по которой корректный на вид шаблон ничего не возвращает.
5. Ловушка бэктрекинга
Вложенные квантификаторы вроде (a+)+ на длинной несовпадающей строке могут отправить движок по экспоненциальному числу путей и заморозить вкладку. Держите повторения плоскими, предпочитайте possessive-переписывания или атомарные группы там, где они поддерживаются, и проверяйте подозрительные шаблоны на враждебном вводе перед выпуском — вставьте их в наш тестер регулярных выражений, который подсвечивает каждое совпадение и группу прямо в вашем браузере.