Інструкція
Як перевірити regex, нічого не встановлюючи
Ви написали шаблон і хочете дізнатися, чи справді він збігається з тим, що ви очікуєте, перш ніж вставляти його в код. Ставити настільну програму або вставляти приватний лог на випадковий сайт - це занадто, та й часто ризиковано. У цьому посібнику показано, як прогнати regex по власному тексту просто в браузері, перемикати прапорці, що змінюють поведінку, читати видобуті групи захоплення й бачити підсвічені збіги на місці, при цьому шаблон і текст ніколи не залишають вашу вкладку.
Крок за кроком
- Відкрийте тестер regex і введіть свій шаблон у поле між двома скісними рисками. Самі риски ви не пишете: інструмент показує їх, щоб ви бачили шаблон так, як його читає рушій. Вставте зразок тексту в поле нижче, наприклад кілька рядків логу, список адрес пошти чи фрагмент коду, у якому хочете шукати.

- Задайте прапорці в невеликому полі поруч із шаблоном. Прапорець g знаходить усі збіги, а не зупиняється на першому; i робить пошук нечутливим до регістру; m дозволяє якорям ^ та $ збігатися з початком і кінцем кожного рядка, а не всього тексту; s дозволяє крапці збігатися й з переносами рядків. Поєднуйте їх вільно, наприклад gim.
- Натисніть Test. Кожен збіг підсвічується просто у вашому тексті, а список нижче показує всі збіги з їхньою позицією та значенням кожної групи захоплення. Підправте шаблон і запустіть знову: попередній перегляд оновиться, і ви зможете звужувати шаблон, доки він не вловить саме те, що ви мали на увазі, і нічого зайвого.

Групи захоплення, іменовані та нумеровані
Група захоплення - це частина шаблону, узята в круглі дужки, і саме так ви видобуваєте шматок з кожного збігу, а не просто підтверджуєте, що все збіглося цілком. Нумеровані групи рахуються зліва направо за відкривною дужкою: у (\d{4})-(\d{2})-(\d{2}) група 1 - це рік, група 2 - місяць, група 3 - день. Іменовані групи використовують синтаксис (?<name>...), тож (?<year>\d{4}) читається набагато краще за голий номер, коли шаблон розростається. Якщо вам потрібно лише згрупувати без захоплення, наприклад щоб застосувати квантифікатор до кількох символів, скористайтеся групою без захоплення (?:...), щоб вона не засмічувала список результатів. Тестер показує значення кожної групи для кожного збігу - це найшвидший спосіб переконатися, що ви видобуваєте потрібний фрагмент.
Коли шаблон зависає або поводиться не так
Дві проблеми трапляються знову і знову. Перша - катастрофічний відкат: шаблон на кшталт (a+)+$, запущений на довгому рядку без збігу, може змусити рушій перебрати експоненційну кількість шляхів і зависнути. Тестер виконує кожну перевірку у Web Worker із коротким сторожовим таймером, тож замість завислої вкладки ви отримуєте зрозуміле повідомлення й можете спростити шаблон - зазвичай зробивши квантифікатор по суті загарбницьким, поставивши якір або уникнувши вкладеного повторення. Друга - жадібний проти лінивого збігу: за замовчуванням .* захоплює стільки, скільки може, тож щоб збігтися зі вмістом одного тегу HTML, вам потрібна лінива форма .*?. Якщо ви порівнюєте дві трохи різні версії рядка, щоб зрозуміти, на що має націлюватися ваш шаблон, інструмент порівняння тексту вирівнює їх, щоб різниця стала очевидною ще до того, як ви напишете вираз.
Як браузер обчислює ваш regex
Сучасні браузери мають вбудований рушій regex ECMAScript, що підтримує повний набір прапорів: нечутливий до регістру збіг (i), режим кількох рядків (m), dotAll (s), Unicode (u) і прилипаючий прапор (y). Коли ви вводите шаблон у тестер, рушій компілює його у внутрішній NFA і обчислює його відповідно до вашого тестового рядка в реальному часі, повідомляючи про кожну позицію збігу та будь-які групи захоплення. Відкат відбувається локально на вашому CPU: шаблон на зразок (a+)+ на довгому невідповідному рядку може зависнути на секунди, і спостереження цього зависання у браузері є корисним зворотним зв'язком перед розгортанням шаблону у виробничому коді. Жоден текст не покидає сторінку, тому ви можете вставляти зразки журналів або будь-які вхідні дані, не направляючи їх через сторонній сервер.
Інструменти з цього гайда
Поширені запитання
Чи надсилаються мій шаблон або перевірочний текст на сервер?
Ні. Regex виконується всередині Web Worker у вашому власному браузері, тож шаблон і текст, на якому ви перевіряєте, лишаються у вкладці. Це важливо, бо текст, який ви вставляєте, часто є реальним логом, списком клієнтів чи внутрішнім конфігом - саме тими даними, які ви не хочете віддавати на чужий сервер. Відкрийте панель Network в інструментах розробника, коли натиснете Test, і ви не побачите жодного запиту, що виносив би ваш текст назовні. До того ж інструмент продовжує працювати офлайн після того, як сторінка завантажилася.
Який діалект regex використовує тестер?
Він використовує рушій регулярних виразів JavaScript, вбудований у ваш браузер, той самий, що працює в Node.js і на будь-якій веб-сторінці. Це охоплює поширений синтаксис: класи символів, квантифікатори, якорі, чергування, нумеровані та іменовані групи захоплення, випереджувальну й ретроспективну перевірку. Кілька можливостей з інших діалектів, таких як рекурсія в стилі Perl чи загарбницькі квантифікатори, не входять до рушія JavaScript, тож якщо шаблон, скопійований вами з проєкту на PHP або Python, поводиться інакше, причина зазвичай саме в цій різниці діалектів.