CodeKitHub
Текстові інструменти

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

Останнє оновлення:

Тестер регулярних виразів дозволяє написати регулярний вираз і миттєво побачити, як він збігається з реальним текстом, з групами захоплення та флагами, видимими одразу під час набору — цей інструмент використовує JavaScript-рушій, описаний у посібнику MDN з регулярних виразів, той самий синтаксис, що й у Node.js та в кожному браузері. Чудово підходить для побудови й налагодження шаблонів перед тим, як вставити їх у код.

//

    Що це за інструмент?

    Регулярний вираз (регекс) — це компактна мова шаблонів для пошуку, перевірки та витягування тексту: шаблон для email може перевіряти введені у формі дані, \d{4}-\d{2}-\d{2} знаходить дати, а групи захоплення витягують саме ті частини, які потрібні. Регекс підтримує майже кожна мова програмування та редактор.

    Цей тестер використовує JavaScript-рушій регулярних виразів — той самий, що працює в Node.js і в кожному браузері — тож шаблони, побудовані тут, поводитимуться однаково у вашому JavaScript/TypeScript коді. Більшість шаблонів також працюють без змін у Python, Java та Go.

    Навіщо його використовувати?

    • Миттєвий зворотний зв'язок: збіги підсвічуються жовтим одразу під час набору шаблону.
    • Групи захоплення показуються для кожного збігу — видно точно, що міститимуть $1 та $2.
    • Повна підтримка флагів: g (усі збіги), i (без урахування регістру), m (багаторядковий режим), s (крапка збігається з переносом рядка), u (юнікод).
    • Зрозумілі повідомлення про помилки, якщо в шаблоні є синтаксична помилка.
    • Безкоштовно й приватно — шаблон і текст ніколи не покидають ваш браузер.

    Як користуватися

    1. Введіть шаблон між двома символами / (екранувати самі слеші не потрібно).
    2. Налаштуйте флаги в маленькому полі після другого / — за замовчуванням g знаходить усі збіги.
    3. Вставте тестовий текст нижче.
    4. Збіги підсвітяться миттєво; групи захоплення перелічені знизу.
    5. Якщо шаблон недійсний, повідомлення про помилку пояснить, що не так.

    Приклад

    Введення

    Шаблон: (\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 — відформатуйте витягнутий вивід, щоб перевірити, що він розібрався так, як ви очікували.

    Порівняння тексту · Форматер JSON

    Часті запитання

    Який діалект регексу використовує цей тестер?

    JavaScript (ECMAScript) — рушій, що працює в кожному браузері та в Node.js. Основний синтаксис переносний, але деякі можливості відрізняються між мовами — наприклад, підтримка lookbehind і синтаксис іменованих груп у Python та Java інші.

    Чому мій шаблон знаходить лише перший збіг?

    Відсутній флаг g (глобальний). Без g регекс зупиняється після першого збігу. Цей інструмент за замовчуванням додає g — перевірте, чи ви його не прибрали.

    Чому крапка . не збігається з переносами рядка?

    За замовчуванням . збігається з будь-яким символом, окрім переносу рядка. Додайте флаг s (dotall), щоб крапка збігалася і з переносами рядка, або використайте [\s\S] як переносний варіант.

    Що означають результати груп захоплення?

    Кожна пара дужок у вашому шаблоні захоплює текст, з яким вона збіглася. $1 — це перша група, $2 — друга, і так далі — саме на них ви посилаєтесь в операціях заміни та в коді витягування даних.

    Чому мій регекс повільний або зависає?

    Найімовірніше, це катастрофічний бектрекінг, спричинений вкладеними квантифікаторами на кшталт (a+)+ на тексті, що не збігається. Перепишіть шаблон, щоб уникнути неоднозначного повторення. Цей інструмент обмежує вивід 1000 збігами, щоб залишатися чутливим.

    Схожі інструменти