Тестер регулярних виразів
Перевіряйте регулярні вирази JavaScript наживо: підсвічені збіги, групи захоплення, заміна та просте пояснення кожного токена шаблону.
| # | Позиція | Збіг | Групи |
|---|
Пояснення шаблону
Увага: повторювана група містить ще один необмежений квантифікатор, наприклад (a+)+. Такі шаблони можуть виконуватися експоненціально довго на тексті, що майже збігається (катастрофічний відкат).
Як користуватися тестером регулярних виразів
- Введіть шаблон у поле Регулярний вираз без обрамних скісних рисок. Скісні риски й активні прапорці показано навколо поля, як-от
/шаблон/g. - Позначте потрібні Прапорці:
g(global),i(ignore case),m(multiline),s(dotAll),u(unicode) абоy(sticky). - Вставте текст для пошуку в Тестовий текст. Збіги підсвічуються під час введення, а таблиця перелічує кожен збіг із його позицією та групами захоплення.
- Щоб спробувати підстановку, заповніть Заміна. Поле Результат після заміни показує текст, у якому кожен збіг замінено, готовий до копіювання.
- Прочитайте Пояснення шаблону, щоб перевірити, що робить кожна частина вашого виразу. Не знаєте, з чого почати? Натисніть Завантажити приклад.
Що показує тестер
- Підсвічені збіги: кожен збіг у тестовому тексті позначено, тож одразу видно, що знайдено, а що пропущено.
- Таблиця збігів: номер кожного збігу, його позиція (зсув у символах від початку, відлік від 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 – за два.
Схожі інструменти
- Форматувальник і валідатор JSON Безкоштовний форматувальник і валідатор JSON: форматує, мінімізує та перевіряє JSON у браузері й показує помилки синтаксису з рядком і стовпцем.
- Кодування й декодування URL Безкоштовний кодувальник і декодувальник URL. Кодуйте параметри запиту чи повні URL, декодуйте послідовності %XX і обробляйте + як пробіл. Працює в браузері.
- Генератор хешів: MD5, SHA-256, SHA-512 Створюйте хеші MD5, SHA-1, SHA-256 та SHA-512 для тексту чи файлів будь-якого розміру й перевіряйте контрольні суми. Усе працює у вашому браузері.