Regex тестер за 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Нов ред, табулация, връщане на каретката
\uFFFFUnicode кодова единица
\u{1F600}Кодова точка (изисква u)
$&Цялото съвпадение в замяната
$` $'Текст преди / след съвпадението

Как да използвате: Regex тестер

  1. Въведете шаблона между наклонените черти, без обграждащите /.
  2. Превключвайте флагове като g (всички съвпадения), i (без значение от регистъра) и m (многоредов режим).
  3. Поставете тестовия текст. Съвпаденията се маркират вдясно и се изброяват по-долу с индекса и групите за прихващане.
  4. Отметнете Замяна и въведете замяна като $1 или $<name>, за да видите резултата от String.replace.
  5. Изберете шаблон от Библиотеката с шаблони, за да започнете от проверен regex за имейл, 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Връща началната и крайната позиция за всяка група за прихващане.

Защита от катастрофален backtracking

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

Съвети за по-добри регулярни изрази

  • Закотвяйте шаблоните с ^ и $, когато валидирате цели стойности, иначе ще мине и съвпадение навсякъде в низа.
  • Предпочитайте конкретни класове като [^"]* пред .*; те са по-бързи и не хващат повече от нужното.
  • Използвайте групи без прихващане (?:…), когато не ви трябва прихванатата стойност.
  • Именувайте групите си. match.groups.year се чете по-лесно от match[1].

Често задавани въпроси

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

Свързани инструменти