Шпаргалка з регулярних виразів
Регулярні вирази достатньо компактні, тож синтаксис легше знайти в довіднику, ніж запам'ятати. Ця сторінка вміщує його весь на одному екрані — класи, квантифікатори, якорі, групи, lookaround, екранування й прапорці — з робочим прикладом для кожного рядка.
Діалект — JavaScript, саме він працює у вашому браузері й саме його використовує тестувальник regex на цьому сайті. Більшість із нього ідентична в Python, Java, Go та PCRE; там, де діалекти розходяться, вони розходяться на краях — підтримка lookbehind, синтаксис іменованих груп і те, чи означає \d "цифру ASCII", чи "будь-яку цифру Unicode".
Дві речі спричиняють більшість несподіванок. Квантифікатори жадібні: вони беруть усе, що можуть, і віддають назад лише тоді, коли решта шаблону не збігається, тому <.+> поглинає два теги, а <.+?> ні. А альтернація зв'язує найслабше з усього, тож ^a|b$ означає "починається з a або закінчується на b" — не те, що більшість людей мають на увазі, коли це пишуть.
Класи символів
11Скорочення працюють лише з ASCII, доки ви не додасте прапорець u й не використаєте екранування властивостей 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 | Розглядає шаблон як кодові точки й вмикає екранування властивостей \p{…}. |
| y | Липкий | Збігається лише точно на lastIndex, ніколи не шукаючи вперед. |