Тестер регулярних виразів
Вираз виконується у вашому браузері, в окремому потоці й з обмеженням часу. Тому навіть регулярка, яка зациклюється, не підвісить сторінку — ви просто побачите попередження.
Про інструмент: перевірка регулярних виразів
Регулярний вираз рідко виходить правильним з першого разу, а перевіряти його прямо в коді довго. Цей інструмент показує збіги одразу під час набору: підсвічує знайдене в тексті, розбирає кожен збіг на групи й уміє показати результат заміни. Тут немає сторонньої реклами й реєстрації.
Усе виконується у вашому браузері — ані вираз, ані текст не надсилаються на сервер.
Головні переваги інструменту:
Зациклений вираз не підвісить сторінку: пошук іде в окремому потоці з обмеженням часу. Це рідкість серед онлайн-тестерів, а проблема цілком реальна — нижче пояснюємо, чому.
Групи видно окремо: під кожним збігом перелічені нумеровані та іменовані групи, тому одразу зрозуміло, що саме потрапить у
$1чи$<назва>.Режим заміни: перемикач показує не збіги, а готовий результат — так простіше складати вираз для масової правки тексту.
Прапорці
g— шукати всі збіги, а не лише перший. Без нього інструмент покаже одну знахідку.i— не зважати на регістр літер.m— багаторядковий режим:^і$починають означати початок і кінець кожного рядка, а не всього тексту.s— крапка починає збігатися й із символом переносу рядка.u— коректна робота з юнікодом. Потрібен, якщо у виразі є\p{...}або символи поза базовою латиницею.y— липкий пошук: збіг має починатися рівно з поточної позиції.
Чому поганий вираз може повісити браузер
Це називають катастрофічним бектрекінгом. Коли у виразі вкладені повторення, як у (a+)+$, рушій перебирає всі можливі способи розбити рядок. Кількість варіантів росте вдвічі з кожним символом, тому вже на трьох десятках літер обчислення триває довше, ніж ви готові чекати.
У звичайному тестері такий вираз намертво вішає вкладку, і врятує лише її закриття: зупинити регулярку, що вже виконується, неможливо. Тому тут пошук винесений в окремий потік, і якщо він не вкладається у півтори секунди, потік просто зупиняється, а ви бачите попередження замість зависання.
Практичний висновок ширший за цей інструмент: якщо регулярний вираз обробляє дані, які приходять ззовні, вкладених повторень варто уникати. Інакше це не просто незручність, а спосіб покласти сервер одним рядком.
Кілька практичних порад
Починайте з малого: складіть вираз для одного випадку, а потім розширюйте, щоразу звіряючись зі списком збігів.
Замість крапки беріть конкретніше:
[^,]+працює швидше й передбачуваніше, ніж.+, і рідше дає катастрофічний бектрекінг.Іменовані групи читабельніші:
(?<year>\d{4})у коді зрозуміліший за$1, особливо коли груп кілька.Не розбирайте HTML регулярками: вкладені теги неможливо описати регулярним виразом у принципі. Для цього є парсери.