Перейти до вмісту
TextArray

Шпаргалка регулярних виразів

Регулярні вирази досить компактні, тому синтаксис легше знайти, ніж запам’ятати. На цій сторінці представлено все на одному екрані — класи, квантори, прив’язки, групи, огляд, екранування та прапори — з робочим прикладом для кожного рядка.

Різновидом є JavaScript, який працює у вашому браузері та який використовує тестер регулярних виразів на цьому сайті. Більшість з них ідентична в Python, Java, Go та PCRE; де смаки розходяться, вони розходяться на краях — підтримка огляду назад, синтаксис іменованих груп і те, чи \d означає «цифру ASCII» чи «будь-яку цифру Unicode».

Більшість сюрпризів викликають дві речі. Квантори жадібні: вони беруть усе, що можуть, і віддають назад лише тоді, коли решта шаблону не працює, тому <.+> ковтає два теги, а <.+?> ні. І чергування зв’язує найслабше, тому ^a|b$ означає «починається з a або закінчується b» — не те, що більшість людей мають на увазі, коли пишуть це.

Класи персонажів

Скорочення призначені лише для 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é"

Квантори

Усі вони за замовчуванням жадібні: вони беруть стільки, скільки можуть, і віддають, лише якщо решта шаблону не вдається.

СинтаксисЗначенняприклад
*Нуль або більше/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Кордон словаЦе те, що зупиняє відповідність "cat" всередині "concatenate"./\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Крапка вседозволяє . відповідні розриви рядків також.
uUnicodeРозглядає шаблон як кодові точки та вмикає екранування властивості \p{…}.
yЛипкийЗбігається лише з останнім індексом, без пошуку вперед.

FAQ

Яка різниця між жадібними та ледачими кванторами?
Жадібні квантифікатори (*, +, {2,}) збігаються якомога більше і повертають символи лише тоді, коли решта шаблону не збігається. Додавання ? робить їх ледачими: вони збігаються якомога менше і беруть більше лише коли змушені. Для "<a><b>" шаблон <.+> повертає весь рядок, а <.+?> повертає лише <a>.
Чому моє слово збігається з іншими словами?
Тому що ніщо це не закріпило. Перенесіть слово в \b — /\bcat\b/ відповідає «кіт» у «кіт сидів», але не всередині «конкатенація». \b відповідає позиції між символом слова та символом, що не є словом, тому він нічого не споживає.
Що змінює прапор u?
Це змушує шаблон працювати з кодовими точками, а не з одиницями UTF-16, тому один емоджі вважається одним символом, і це вмикає властивості \p{…}, такі як \p{L} для «будь-якої літери». Без нього \w і \d залишаються лише ASCII, тому "café" не повністю відповідає /\w+/.
Коли слід використовувати групу без захоплення?
Щоразу, коли вам потрібно групування, але не захоплений текст — (?:ab)+ замість (ab)+. Захоплення коштує невеликої продуктивності, але справжня причина полягає в нумерації: кожна група захоплення, яку ви додаєте, зміщує номери груп після неї, тихо порушуючи заміни, які використовують $1 і $2.
Чи безпечно використовувати Lookbehind?
У поточних браузерах і Node так — (?<=…) і (?<!…) підтримуються всіма основними двигунами з 2018 року. Safari був останнім, хто додав їх. Якщо ви націлюєтеся на дуже старі середовища виконання, спочатку перевірте; для синтаксису регулярного виразу немає полізаповнення.