UltKit
Зображення11
PDF13
Документи й дані7
Відео6
Аудіо4
Інші інструменти22

Тестер регулярних виразів

Введіть шаблон, позначте потрібні прапорці та вставте текст: кожен збіг підсвічується просто під час введення і з’являється у списку з позицією та групами захоплення. Шаблон виконується власним рушієм регулярних виразів JavaScript у вашому браузері, тому результати збігаються з поведінкою вашого коду, а текст не залишає ваш пристрій.

Прапорці

0 символів · 0 слів · 0 рядків

Збіги буде виділено тут.

0 символів · 0 слів · 0 рядків

Працює повністю у вкладці браузера. Ваш текст ніколи не завантажується на сервер і не зберігається.

Токени регулярних виразів JavaScript

Стовпець першого збігу отримано запуском кожного шаблону на його тексті рушієм JavaScript, що будував цю сторінку.

ТокенЗначенняШаблонТекстПерший збіг
\dЦифра 0–9/\d+/Order 66 shipped66
\wЛітера, цифра або підкреслення (ASCII)/\w+/snake_case-idsnake_case
\sПробільний символ, зокрема табуляція та переноси рядків/\s+/two spaces
.Будь-який символ, крім переносу рядка (якщо немає s)/a.c/abc a-cabc
^ $Початок і кінець вводу (або рядка, з m)/^\w+$/singlesingle
[abc]Один із перелічених символів/[aeiou]/rhythm and bluesa
[^abc]Будь-який символ, якого немає в переліку/[^0-9]+/2026-10-18-
* + ?0 або більше, 1 або більше, 0 або 1/colou?r/color colourcolor
{n,m}Від n до m разів/\d{2,4}/7 42 1999 12345642
(…)Група захоплення/(\d+)px/width: 320px320px
(?<name>…)Іменована група захоплення/(?<h>\d\d):(?<m>\d\d)/at 09:4509:45
(?:…)Група без захоплення/(?:ab)+/ababab!ababab
a|bБудь-яка зі сторін/cat|dog/hotdogdog
\bМежа слова/\bcat\b/concat catcat
(?=…)Після якого йде (lookahead)/\d+(?=%)/50 of 75%75
(?<!…)Перед яким немає (negative lookbehind)/(?<!\$)\b\d+/$30 or 4040
\p{L}Будь-яка літера Unicode (потрібен u)/\p{L}+/unaïve 東京naïve

Шість прапорців і що вони змінюють

g (global) знаходить усі збіги, а не зупиняється на першому; без нього в списку буде один запис. i ігнорує регістр. m (multiline) змушує ^ і $ збігатися на початку й у кінці кожного рядка, а не лише всього тексту, що потрібно для шаблону на кшталт пробілів наприкінці рядка. s (dotAll, додано в ES2018) дозволяє . збігатися і з розривами рядків. u (unicode) розглядає текст як кодові точки, тож емодзі враховується як один символ, і вмикає escape-послідовності властивостей, наприклад \p{L} для будь-якої літери будь-якого письма. y (sticky) збігається лише точно в поточній позиції; цей режим використовують токенізатори. У JavaScript також є d для індексів збігів і v для операцій над множинами в класах; цей тестер підтримує лише шість прапорців, наведених вище.

Під тестовим текстом для кожного збігу показано його індекс і групи. Нумеровані групи створюють звичайні дужки, (?:…) групує без захоплення, а (?<year>\d{4}) створює іменовану групу, яка відображається за назвою, як показує приклад з датою ISO. Меню Common patterns вставляє перевірені заготовки для адрес електронної пошти, URL, адрес IPv4, шістнадцяткових кольорів, UUID, повторюваних слів і пробілів наприкінці рядка. Шаблон для email сприймайте як грубу перевірку, а не валідацію: повна граматика адреси значно ширша, а єдина справжня перевірка — надіслати лист.

Ретроспективна перевірка (lookbehind) і катастрофічний бектрекінг

Lookaround-конструкції перевіряють, що оточує позицію, не споживаючи символів. Lookahead, (?=…) і (?!…), був у JavaScript завжди; lookbehind, (?<=…) і (?<!…), з’явився в ES2018 і потрапив у всі основні браузери, коли Safari 16.4 підтримав його у 2023 році. Тож (?<=\$)\d+ знаходить 42 у "$42" без знака долара. На відміну від багатьох інших рушіїв, JavaScript дозволяє lookbehind будь-якої довжини.

Рушій JavaScript використовує повернення (backtracking): коли шлях не вдається, він повертається і пробує альтернативи. Вкладені квантифікатори, як-от (a+)+$, дають йому експоненційну кількість способів розбити той самий текст, тож рядок із 30 літер a та x наприкінці може обробляться секундами, а кілька додаткових літер — годинами. Це катастрофічний backtracking, а на серверах він перетворюється на ReDoS, відмову в обслуговуванні; одне правило WAF з такою вадою вивело з ладу мережу Cloudflare приблизно на пів години 2 липня 2019 року. Оскільки цей тестер працює у вашій вкладці, такий шаблон може заблокувати сторінку; перезавантажте її та перепишіть шаблон так, щоб два квантифікатори не могли претендувати на одні й ті самі символи: використовуйте точніші класи, як-от [^,]* замість .*, або якорі. Для редагування самого тексту, а не пошуку збігів, дивіться текстові інструменти; більше утиліт для розробників у розділі інструменти для розробників.

Поширені запитання

Чому регулярний вираз знаходить лише один збіг?
Прапорець g вимкнено. Без нього рушій зупиняється після першого збігу. Увімкніть g, щоб побачити всі входження; прапорець y сам по собі теж знаходить кілька збігів, але лише коли вони йдуть один за одним впритул.
Чи відповідає \d цифрам інших писемностей у JavaScript?
Ні. У JavaScript \d означає лише 0–9, а \w — лише ASCII-літери, цифри й підкреслення, навіть із прапорцем u. Для інших писемностей використовуйте \p{Nd} або \p{L} з u.
Чи працюватиме перевірений тут шаблон так само в Python або PHP?
Базовий синтаксис переноситься, але деталі відрізняються: іменовані групи в Python записують як (?P<name>…), PHP і Python підтримують посесивні квантифікатори, яких немає в JavaScript, а правила lookbehind різняться. Перевірте шаблон ще раз у потрібному рушії.
Як знайти буквальну крапку або дужку?
Екрануйте його зворотною скісною рискою: \. відповідає крапці, а \[ — відкривній квадратній дужці. Усередині класу символів більшість знаків і так літеральні, тому [.] також відповідає лише крапці.
Чому сторінка зависла, поки я вводив шаблон?
Імовірно, шаблон спричинив катастрофічний backtracking на вашому тексті. Перезавантажте сторінку, уникайте вкладених квантифікаторів, як-от (.*)* або (a+)+, і робіть так, щоб кожна частина збігалася з якомога меншим фрагментом.