Шпаргалка по регулярным выражениям
Регулярные выражения достаточно компактны, чтобы синтаксис было проще посмотреть, чем запомнить. Эта страница — весь он на одном экране: классы, квантификаторы, якоря, группы, lookaround, экранирование и флаги — с рабочим примером для каждой строки.
Диалект — JavaScript, тот, что работает в вашем браузере и который использует тестер регулярных выражений на этом сайте. Большая часть идентична в Python, Java, Go и PCRE; там, где диалекты расходятся, они расходятся на краях — поддержка lookbehind, синтаксис именованных групп и то, означает ли \d «цифру ASCII» или «любую цифру Unicode».
Большинство неожиданностей объясняются двумя вещами. Квантификаторы жадные: они забирают всё, что могут, и отдают обратно, только когда остальная часть шаблона не совпадает, поэтому <.+> проглатывает два тега, а <.+?> нет. А альтернатива связывает слабее всего, поэтому ^a|b$ означает «начинается с a или заканчивается на b» — не то, что большинство людей имеют в виду, когда это пишут.
Классы символов
11Сокращения работают только с ASCII, пока вы не добавите флаг u и не используете escape-последовательности свойств Unicode.
| Синтаксис | Значение | Пример |
|---|---|---|
| . | Любой символ, кроме разрыва строкиДобавьте флаг s, чтобы он совпадал и с символами новой строки. | /a.c/"abc" → "abc" |
| \d | Цифра, 0–9 | /\d+/"order 42" → "42" |
| \D | Всё, что не является цифрой | /\D+/"42abc" → "abc" |
| \w | Буква, цифра или подчёркиваниеТолько ASCII — «é» не является \w. | /\w+/"user_1!" → "user_1" |
| \W | Всё, с чем не совпадает \w | /\W+/"a++b" → "++" |
| \s | Любой пробельный символ, включая табуляции и символы новой строки | /\s+/"a \t b" → " \t " |
| \S | Любой непробельный символ | /\S+/" hi" → "hi" |
| [abc] | Любой из перечисленных символов | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Любой символ, кроме перечисленных | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Диапазон символов | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Любая буква Unicode (нужен флаг u) | /\p{L}+/"42 café" → "café" |
Квантификаторы
7Все они по умолчанию жадные: забирают как можно больше и отдают обратно, только если остальная часть шаблона не совпадает.
| Синтаксис | Значение | Пример |
|---|---|---|
| * | Ноль или больше | /ab*/"a" → "a" |
| + | Один или больше | /ab+/"abbb" → "abbb" |
| ? | Ноль или один — делает необязательным | /colou?r/"color" → "color" |
| {3} | Ровно три | /\d{3}/"id 12345" → "123" |
| {2,} | Два или больше | /a{2,}/"aaa" → "aaa" |
| {2,4} | От двух до четырёх | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Ленивый — берёт как можно меньшеЖадный <.+> проглотил бы оба тега. | /<.+?>/"<a><b>" → "<a>" |
Якоря и границы
4Они совпадают с позицией, а не с символом, поэтому ничего не поглощают.
| Синтаксис | Значение | Пример |
|---|---|---|
| ^ | Начало всего текста, а с флагом m — начало каждой строки. | /^a/"abc" → "a" |
| $ | Конец всего текста, а с флагом m — конец каждой строки. | /c$/"abc" → "c" |
| \b | Граница словаИменно это не даёт «cat» совпадать внутри «concatenate». | /\bcat\b/"the cat sat" → "cat" |
| \B | Не граница слова | /\Bcat/"concatenate" → "cat" |
Группы и альтернатива
5| Синтаксис | Значение | Пример |
|---|---|---|
| (abc) | Захватывающая группа — запоминается для замены | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Группировка без захватаИспользуйте это, когда нужна только группировка; так номера захватов остаются осмысленными. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Именованная захватывающая группа | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Одна из сторон — альтернативаУ альтернативы самый низкий приоритет: ^a|b$ означает «^a» или «b$», а не «^(a|b)$». | /cat|dog/"one dog" → "dog" |
| \1 | Обратная ссылка на первую группу | /(\w)\1/"letter" → "tt" |
Lookaround
4Утверждения о том, что окружает позицию. Сами по себе они ни с чем не совпадают, что и делает их безопасными для комбинирования.
| Синтаксис | Значение | Пример |
|---|---|---|
| (?=…) | Lookahead — за которым следует это | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Негативный lookahead — за которым не следует это | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — которому предшествует это | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Негативный lookbehind — которому не предшествует это | /(?<!\$)\b\d+/"about 40" → "40" |
Экранирование
5Эти двенадцать символов — те, которым нужна обратная косая черта, чтобы восприниматься буквально.
| Синтаксис | Значение | Пример |
|---|---|---|
| \. | Буквальная точка | /\d\.\d/"v2.5" → "2.5" |
| \\ | Буквальная обратная косая черта | /\\/"C:\\dir" → "\\" |
| \n | Перевод строки | /a\nb/"a\nb" → "a\nb" |
| \t | Символ табуляции | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Символ по его кодовой точке | /\u00e9/"café" → "é" |
Флаги
6| Флаг | Название | Значение |
|---|---|---|
| g | Глобальный | Находит все совпадения, а не только первое. |
| i | Игнорировать регистр | Совпадает независимо от верхнего или нижнего регистра. |
| m | Многострочный | Заставляет ^ и $ совпадать на каждом разрыве строки, а не только в концах всего текста. |
| s | Точка совпадает со всем | Позволяет . совпадать и с разрывами строк. |
| u | Unicode | Рассматривает шаблон как кодовые точки и включает escape-последовательности свойств \p{…}. |
| y | Липкий | Совпадает только точно на lastIndex, никогда не выполняя поиск вперёд. |