Шпаргалка по регулярным выражениям
Регулярные выражения достаточно компактны, поэтому их синтаксис легче искать, чем запоминать. На этой странице все это представлено на одном экране — классы, квантификаторы, привязки, группы, обход, экранирование и флаги — с рабочим примером для каждой строки.
Его особенностью является JavaScript, который запускается в вашем браузере и который использует тестер регулярных выражений на этом сайте. Большая часть из них идентична в Python, Java, Go и PCRE; там, где варианты расходятся, они расходятся по краям — поддержка просмотра назад, синтаксис именованной группы и то, означает ли \d «цифру ASCII» или «любую цифру Юникода».
Большая часть сюрпризов связана с двумя вещами. Квантификаторы жадны: они берут все, что могут, и возвращают обратно только тогда, когда остальная часть шаблона дает сбой, поэтому <.+> проглатывает два тега, а <.+?> — нет. А чередование связывает слабее всего, поэтому ^a|b$ означает «начинается с a или заканчивается на b» — а это не то, что большинство людей подразумевают, когда пишут это.
Классы персонажей
Сокращения доступны только в формате 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} | Любая буква Юникода (нужен флаг u) | /\p{L}+/"42 café" → "café" |
Кванторы
Все они по умолчанию жадные: берут столько, сколько могут, и отдают только в том случае, если остальная часть шаблона терпит неудачу.
| Синтаксис | Значение | Пример |
|---|---|---|
| * | Ноль или больше | /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>" |
Якоря и границы
Они соответствуют позиции, а не персонажу, поэтому ничего не потребляют.
| Синтаксис | Значение | Пример |
|---|---|---|
| ^ | Начало строки или строки с флагом m. | /^a/"abc" → "a" |
| $ | Конец строки или строки с флагом m. | /c$/"abc" → "c" |
| \b | Граница словаЭто то, что останавливает сопоставление «кота» внутри «конкатенации». | /\bcat\b/"the cat sat" → "cat" |
| \B | Нет границы слова | /\Bcat/"concatenate" → "cat" |
Группы и чередование
| Синтаксис | Значение | Пример |
|---|---|---|
| (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" |
осмотр
Утверждения о том, что окружает позицию. Сами по себе они ничему не соответствуют, поэтому их безопасно комбинировать.
| Синтаксис | Значение | Пример |
|---|---|---|
| (?=…) | Lookahead — за которым следует это | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Негативный прогноз — без этого | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — предшествует этому | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Негативный просмотр - этому не предшествует | /(?<!\$)\b\d+/"about 40" → "40" |
Побег
Именно эти двенадцать символов нуждаются в обратной косой черте, чтобы понимать их буквально.
| Синтаксис | Значение | Пример |
|---|---|---|
| \. | Буквальная точка | /\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é" → "é" |
Флаги
| Флаг | Имя | Значение |
|---|---|---|
| g | Глобальный | Найдите каждое совпадение, а не только первое. |
| i | Игнорировать регистр | Совпадение независимо от верхнего или нижнего регистра. |
| m | Многострочный | Сопоставляет ^ и $ при каждом разрыве строки, а не только в концах строки. |
| s | Расставить все точки | Давайте. линия совпадения тоже разрывается. |
| u | Юникод | Рассматривает шаблон как кодовые точки и разрешает экранирование свойств \p{…}. |
| y | Липкий | Соответствует только последнему индексу, никогда не выполняет поиск вперед. |