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.
Готовые паттерны
^\+?[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 в нижнем регистре: слова через один дефис.
Флаги и отладка
/pattern/gИскать все совпадения, а не первое.
/pattern/iИгнорировать регистр.
/pattern/m^ и $ работают построчно.
/pattern/sТочка начинает захватывать перевод строки.
/pattern/uUnicode-режим: важен для корректной работы с кодовыми точками.
new RegExp(source, flags)Создать выражение из строки; обратные слеши в строке нужно экранировать дважды.