Регулярные выражения без ритуалов

RegExp: найти форму.

Синтаксис, который встречается в JavaScript, PCRE и большинстве современных движков. Проверяйте выражение на реальных строках: один пример почти всегда экономит десяток догадок.

Основа

abc

Найти буквальную последовательность abc.

.

Любой один символ, кроме перевода строки без режима dotall.

\.

Экранировать служебный символ и найти именно точку.

^start

Начало строки; с флагом m — начало каждой строки.

end$

Конец строки; с флагом m — конец каждой строки.

^exact$

Проверить, что вся строка строго равна exact.

Символы и границы

\d / \D

Цифра / не цифра.

\w / \W

Символ слова (A–Z, a–z, цифры, _) / не символ слова.

\s / \S

Пробельный / непробельный символ.

[abc]

Один символ: a, b или c.

[a-zA-Z]

Одна латинская буква любого регистра.

[^0-9]

Любой символ, кроме цифры.

\bword\b

Слово word по границам слова; для кириллицы поведение зависит от движка.

Повторы

a*

Ноль или больше a.

a+

Одна или больше a.

a?

Ноль или одна a; также делает квантификатор ленивым: .*?.

a{3}

Ровно три a.

a{2,5}

От двух до пяти a.

<.*?>

Лениво взять текст первого HTML-подобного тега; .* был бы жадным.

Группы и выбор

cat|dog

Совпадение с cat либо dog.

(ab)+

Группа с захватом: повторяется весь фрагмент ab.

(?:ab)+

Незахватывающая группа — когда результат группы не нужен.

(?<name>\w+)

Именованная группа. В JavaScript доступна как match.groups.name.

\1

Ссылка на первую захваченную группу: (\w+)\s+\1 найдёт повтор слова.

Проверки контекста

foo(?=bar)

foo, только если сразу после него bar; bar не войдёт в совпадение.

foo(?!bar)

foo, только если после него нет bar.

(?<=€)\d+

Число после символа евро. Lookbehind поддерживается не во всех старых движках.

(?<!-)\d+

Число, перед которым нет дефиса; отрицательный lookbehind.

Lookbehind проверяйте по документации конкретного движка: его поддержка исторически различалась

Готовые паттерны

^\+?[1-9]\d{7,14}$

Упрощённый международный телефон: валидация формата, но не существования номера.

^[^\s@]+@[^\s@]+\.[^\s@]+$

Базовая проверка email для формы. Полная спецификация email значительно сложнее.

^\d{4}-\d{2}-\d{2}$

Дата в формате YYYY-MM-DD; календарную корректность проверяйте кодом.

\bhttps?:\/\/[^\s]+

Найти HTTP(S)-ссылку до ближайшего пробела.

^[a-z0-9]+(?:-[a-z0-9]+)*$

Slug в нижнем регистре: слова через один дефис.

RegExp проверяет форму. Права доступа, существование и бизнес-правила проверяются отдельно

Флаги и отладка

/pattern/g

Искать все совпадения, а не первое.

/pattern/i

Игнорировать регистр.

/pattern/m

^ и $ работают построчно.

/pattern/s

Точка начинает захватывать перевод строки.

/pattern/u

Unicode-режим: важен для корректной работы с кодовыми точками.

new RegExp(source, flags)

Создать выражение из строки; обратные слеши в строке нужно экранировать дважды.