Що це за інструмент?
Регулярний вираз (регекс) — це компактна мова шаблонів для пошуку, перевірки та витягування тексту: шаблон для email може перевіряти введені у формі дані, \d{4}-\d{2}-\d{2} знаходить дати, а групи захоплення витягують саме ті частини, які потрібні. Регекс підтримує майже кожна мова програмування та редактор.
Цей тестер використовує JavaScript-рушій регулярних виразів — той самий, що працює в Node.js і в кожному браузері — тож шаблони, побудовані тут, поводитимуться однаково у вашому JavaScript/TypeScript коді. Більшість шаблонів також працюють без змін у Python, Java та Go.
Навіщо його використовувати?
- Миттєвий зворотний зв'язок: збіги підсвічуються жовтим одразу під час набору шаблону.
- Групи захоплення показуються для кожного збігу — видно точно, що міститимуть $1 та $2.
- Повна підтримка флагів: g (усі збіги), i (без урахування регістру), m (багаторядковий режим), s (крапка збігається з переносом рядка), u (юнікод).
- Зрозумілі повідомлення про помилки, якщо в шаблоні є синтаксична помилка.
- Безкоштовно й приватно — шаблон і текст ніколи не покидають ваш браузер.
Як користуватися
- Введіть шаблон між двома символами / (екранувати самі слеші не потрібно).
- Налаштуйте флаги в маленькому полі після другого / — за замовчуванням g знаходить усі збіги.
- Вставте тестовий текст нижче.
- Збіги підсвітяться миттєво; групи захоплення перелічені знизу.
- Якщо шаблон недійсний, повідомлення про помилку пояснить, що не так.
Приклад
Введення
Шаблон: (\w+)@(\w+)\.com
Тестовий текст: Contact alice@example.com or bob@test.comРезультат
✓ 2 збіги
#1 групи: $1=alice $2=example
#2 групи: $1=bob $2=testДужки створюють групи захоплення, на які можна посилатися як $1 та $2 у заміні.
Практичні поради
- Перевіряєте поле email? ^[^\s@]+@[^\s@]+\.[^\s@]+$ — це поблажливий шаблон, що ловить очевидні помилки, не відхиляючи валідні, але незвичайні адреси — повна відповідність RFC 5322 потребує бібліотеки, а не одного рядка.
- Витягуєте параметри запиту з URL? [?&]([^=]+)=([^&]*) із флагом g, а потім читайте $1/$2 для кожного збігу замість ручного розбиття по & та =.
- Плануєте використати шаблон у .replace()? Спершу перевірте його тут — те, що підсвічується, це саме те, чого торкнеться .replace(), включно з групами захоплення.
- Розбираєте багаторядкові логи (шукаєте мітку часу на початку кожного рядка)? Додайте флаг m, щоб ^ та $ прив'язувалися до кожного рядка, а не до всього рядка тексту.
- Скопіювали шаблон із Python чи PHP, і він тут не збігається? Перевірте іменовані групи (?P<name>...) — у JavaScript використовується (?<name>...), без P — або присвійні квантифікатори (++, *+), яких у JavaScript-регексі не існує.
JavaScript-тестер регексу, а не універсальний
Цей інструмент запускає вбудований рушій RegExp у JavaScript — той самий шлях коду, що стоїть за str.match(pattern) чи pattern.test(str) у консолі браузера або в Node.js. Це відрізняється від тестування проти PCRE (що використовує PHP, і на що за замовчуванням орієнтуються багато "універсальних" тестерів регексів) чи модуля re у Python: у JavaScript немає присвійних квантифікаторів чи атомарних груп, а іменовані групи захоплення записуються як (?<name>...) замість (?P<name>...) у PCRE/Python.
Якщо ви збираєтеся використати шаблон у JS чи TypeScript — валідація форми, маршрутизатор, парсер логів — тестування тут гарантує нульову невідповідність діалекту: те, що підсвічується на цій сторінці, точно те, з чим збігається new RegExp(pattern, flags) під час виконання.
Де це вписується в реальні робочі процеси
Тест регексу рідко буває окремою операцією. Звична послідовність: підтвердити шаблон тут, виконати справжній .replace() у коді, а потім порівняти текст до й після, щоб переконатися, що заміна зробила саме те, що очікувалося, і нічого зайвого.
Витягування структурованих даних групами захоплення часто одразу переходить у JSON — відформатуйте витягнутий вивід, щоб перевірити, що він розібрався так, як ви очікували.
Часті запитання
Який діалект регексу використовує цей тестер?
JavaScript (ECMAScript) — рушій, що працює в кожному браузері та в Node.js. Основний синтаксис переносний, але деякі можливості відрізняються між мовами — наприклад, підтримка lookbehind і синтаксис іменованих груп у Python та Java інші.
Чому мій шаблон знаходить лише перший збіг?
Відсутній флаг g (глобальний). Без g регекс зупиняється після першого збігу. Цей інструмент за замовчуванням додає g — перевірте, чи ви його не прибрали.
Чому крапка . не збігається з переносами рядка?
За замовчуванням . збігається з будь-яким символом, окрім переносу рядка. Додайте флаг s (dotall), щоб крапка збігалася і з переносами рядка, або використайте [\s\S] як переносний варіант.
Що означають результати груп захоплення?
Кожна пара дужок у вашому шаблоні захоплює текст, з яким вона збіглася. $1 — це перша група, $2 — друга, і так далі — саме на них ви посилаєтесь в операціях заміни та в коді витягування даних.
Чому мій регекс повільний або зависає?
Найімовірніше, це катастрофічний бектрекінг, спричинений вкладеними квантифікаторами на кшталт (a+)+ на тексті, що не збігається. Перепишіть шаблон, щоб уникнути неоднозначного повторення. Цей інструмент обмежує вивід 1000 збігами, щоб залишатися чутливим.