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

Введіть регулярний вираз і бачте підсвітку всіх збігів просто під час введення — з групами захоплення, переглядом заміни та бібліотекою готових шаблонів.

Працює в браузеріБез реєстраціїНічого не завантажується

Підсвічені збіги

    
Використовуйте $1, $<name>, $& (увесь збіг)
Деталі збігів
#ІндексЗбігГрупи
Шпаргалка з regex
.Будь-який символ, крім переведення рядка (будь-який з s)
\d \w \sЦифра, символ слова, пробільний символ
\D \W \SНе цифра, не символ слова, не пробіл
[abc] [^abc]Будь-який з / жоден з a, b, c
[a-z0-9]Діапазон символів
\p{L} \p{N}Літера / цифра Unicode (потрібен u)
^ $Початок / кінець введення (рядка з m)
\b \BМежа слова / не межа
* + ?0 або більше, 1 або більше, 0 або 1
{n} {n,} {n,m}Рівно n, щонайменше n, від n до m
*? +? ??Лінивий (якомога менше)
a|ba або b
(…)Група захоплення, посилання $1
(?<name>…)Іменована група, $<name>
(?:…)Незахоплювальна група
\1 \k<name>Зворотне посилання
(?=…) (?!…)Перевірка вперед / негативна перевірка вперед
(?<=…) (?<!…)Перевірка назад / негативна перевірка назад
\. \* \\Екрановані символи
\n \t \rПереведення рядка, табуляція, повернення каретки
\uFFFFКодова одиниця Unicode
\u{1F600}Кодова точка (потрібен u)
$&Увесь збіг у заміні
$` $'Текст до / після збігу

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

  1. Введіть шаблон між слешами, без обрамлювальних /.
  2. Вмикайте прапорці, наприклад g (усі збіги), i (без урахування регістру) і m (багаторядковий режим).
  3. Вставте тестовий текст. Збіги підсвічуються праворуч і перелічуються нижче з індексом і групами захоплення.
  4. Позначте Заміна й введіть рядок заміни на кшталт $1 або $<name>, щоб побачити результат String.replace.
  5. Виберіть шаблон у Бібліотеці шаблонів, щоб почати з перевіреного regex для email, URL, IP чи дати.

Регулярні вирази JavaScript

Тестер використовує вбудований рушій RegExp вашого браузера, тому результати точно збігаються з тим, що повертають String.match, matchAll, replace і RegExp.exec у JavaScript і Node.js. Включно із сучасним синтаксисом: іменованими групами (?<name>…), перевіркою назад (?<=…), Unicode property escapes на кшталт \p{L} із прапорцем u та індексами збігів із прапорцем d.

Що роблять прапорці

ПрапорецьНазваЕфект
gglobalЗнайти всі збіги, а не зупинитися на першому.
iignoreCaseЛітери збігаються незалежно від регістру.
mmultiline^ і $ збігаються на початку й у кінці кожного рядка.
sdotAll. збігається й з переведенням рядка.
uunicodeШаблон обробляється за кодовими точками; вмикає \p{…} і \u{…}.
ystickyЗбіг лише з поточної позиції lastIndex.
dhasIndicesПовертає початкову й кінцеву позиції для кожної групи захоплення.

Захист від катастрофічного бектрекінгу

Шаблони з вкладеними квантифікаторами, наприклад (a+)+$ або (\w|\d)*x, можуть працювати експоненційно довго на майже відповідних рядках. На звичайній вебсторінці це підвішує вкладку. Тут кожен пошук виконується у фоновому Web Worker, який зупиняється через одну секунду, і замість зависання браузера ви отримуєте зрозуміле попередження. Той самий шаблон у продакшн-коді може бути вразливістю ReDoS, тож сприймайте попередження як баг, який треба виправити.

Поради щодо написання regex

  • Прив'язуйте шаблони через ^ і $ під час перевірки цілих значень, інакше пройде збіг у будь-якому місці рядка.
  • Віддавайте перевагу конкретним класам на кшталт [^"]* замість .*: вони швидші й не захоплюють зайвого.
  • Використовуйте незахоплювальні групи (?:…), коли захоплене значення не потрібне.
  • Давайте групам імена. match.groups.year читається простіше, ніж match[1].

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

Який діалект regex використовується?
JavaScript (ECMAScript) через вбудований у браузер RegExp. Більшість синтаксису спільна з PCRE, Python і Java, але присвійні квантифікатори, атомарні групи та вбудовані модифікатори на кшталт (?i) у JavaScript недоступні.
Чому мій шаблон знаходить лише один збіг?
Без прапорця g (global) JavaScript зупиняється після першого збігу. Увімкніть g, щоб знайти всі входження.
Як посилатися на групи в рядку заміни?
Використовуйте $1, $2… для нумерованих груп, $<name> для іменованих, $& для всього збігу й $$ для символу долара.
Чому тестер зупинився за таймаутом?
Шаблон обробляв ваше введення довше за секунду, що майже завжди означає катастрофічний бектрекінг. Шукайте вкладені квантифікатори на кшталт (x+)+ або альтернативи, що перетинаються, як (a|a)*, і перепишіть їх так, щоб кожен символ міг збігтися лише одним способом.
Чи надсилаються мої тестові дані кудись?
Ні. Пошук виконується локально в Web Worker у вашому браузері. Шаблон і текст зберігаються лише у вашому браузері, щоб вони залишилися на місці, коли ви повернетеся.

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