Utilia

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

Перевіряйте регулярні вирази JavaScript наживо: підсвічені збіги, групи захоплення, заміна та просте пояснення кожного токена шаблону.

Прапорці

Збіги
#ПозиціяЗбігГрупи

Пояснення шаблону

    Як користуватися тестером регулярних виразів

    1. Введіть шаблон у поле Регулярний вираз без обрамних скісних рисок. Скісні риски й активні прапорці показано навколо поля, як-от /шаблон/g.
    2. Позначте потрібні Прапорці: g (global), i (ignore case), m (multiline), s (dotAll), u (unicode) або y (sticky).
    3. Вставте текст для пошуку в Тестовий текст. Збіги підсвічуються під час введення, а таблиця перелічує кожен збіг із його позицією та групами захоплення.
    4. Щоб спробувати підстановку, заповніть Заміна. Поле Результат після заміни показує текст, у якому кожен збіг замінено, готовий до копіювання.
    5. Прочитайте Пояснення шаблону, щоб перевірити, що робить кожна частина вашого виразу. Не знаєте, з чого почати? Натисніть Завантажити приклад.

    Що показує тестер

    • Підсвічені збіги: кожен збіг у тестовому тексті позначено, тож одразу видно, що знайдено, а що пропущено.
    • Таблиця збігів: номер кожного збігу, його позиція (зсув у символах від початку, відлік від 0), знайдений текст і значення кожної групи захоплення. Іменовані групи, як-от (?<year>\d{4}), відображаються під своєю назвою, а групи, що не брали участі в збігу, показано як «(не збіглося)». Перелічуються перші 1000 збігів.
    • Заміна: текст заміни використовує синтаксис JavaScript: $1 або $2 для нумерованих груп, $<name> для іменованих, $& для всього збігу і $$ для символу долара. Без прапорця g замінюється лише перший збіг.
    • Пояснення: шаблон розбивається на токени (літеральний текст, класи символів, якорі, групи, квантифікатори, перевірки навколо, зворотні посилання), кожен із коротким описом. Вкладені групи мають відступи, що значно полегшує перегляд довгих шаблонів.

    Прапорці коротко

    Прапорець Дія
    g Знаходить усі збіги замість зупинки на першому
    i Ігнорує різницю між великими та малими літерами
    m ^ і $ збігаються на початку й наприкінці кожного рядка
    s . збігається також із розривами рядків
    u Повний режим Unicode: \u{…}, \p{…} та емодзі обробляються як одиничні символи
    y Sticky: кожен збіг має починатися точно там, де закінчився попередній

    Катастрофічний відкат

    Деякі шаблони виконуються експоненціально довго на тексті, що майже збігається. Класичний приклад – (a+)+$ на довгому ряді a із b наприкінці: рушій перебирає всі способи розподілу a між двома квантифікаторами, перш ніж здатися. Ця проблема, відома як ReDoS, виводила з ладу реальні вебсайти.

    Цей інструмент захищає ваш браузер трьома способами. Пошук виконується у фоновому обробнику, який зупиняється через 1,5 секунди; тестовий текст обмежено 100 000 символів; а пояснення попереджає, коли повторювана група містить ще один необмежений квантифікатор. Якщо шаблон перевищив час, перепишіть його так, щоб кожен символ можна було зіставити лише одним способом, наприклад a+$ замість (a+)+$.

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

    Який різновид регулярних виразів використовує цей інструмент?

    Він використовує рушій JavaScript (ECMAScript) вашого браузера, точно так, як new RegExp() і String.prototype.replace() у вашому коді. Більша частина синтаксису збігається з PCRE, Python і Java, але деякі можливості відрізняються: посесивних квантифікаторів і атомарних груп у JavaScript немає, а перевірка назад підтримується в усіх сучасних браузерах.

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

    Прапорець g вимкнено. Без нього JavaScript зупиняється після першого збігу, і заміна змінює лише його.

    Як зіставити літеральну крапку, дужку чи знак питання?

    Екрануйте їх зворотним скісним: \., \[, \?. Пояснення показує екрановані символи як «(екранований)», тож ви можете перевірити.

    Чи надсилається мій текст кудись?

    Ні. Шаблон і текст обробляються лише у вашому браузері, тому цей інструмент безпечний для лог-файлів чи даних, що містять персональну інформацію.

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

    Позиції відлічують символи від 0 через усі рядки, як це робить match.index у JavaScript. Розрив рядка рахується за один символ, а емодзі поза Basic Multilingual Plane – за два.