Как да използвате: Regex тестер
- Въведете шаблона между наклонените черти, без обграждащите
/. - Превключвайте флагове като
g (всички съвпадения), i (без значение от регистъра) и m (многоредов режим). - Поставете тестовия текст. Съвпаденията се маркират вдясно и се изброяват по-долу с индекса и групите за прихващане.
- Отметнете Замяна и въведете замяна като
$1 или $<name>, за да видите резултата от String.replace. - Изберете шаблон от Библиотеката с шаблони, за да започнете от проверен regex за имейл, URL, IP или дата.
Регулярни изрази в JavaScript
Този тестер използва собствения RegExp енджин на браузъра ви, така че резултатите са точно това, което връщат String.match, matchAll, replace и RegExp.exec в JavaScript и Node.js. Включително модерния синтаксис: именувани групи (?<name>…), поглед назад (?<=…), Unicode property escapes като \p{L} с флага u и индекси на съвпаденията с флага d.
Какво правят флаговете
| Флаг | Име | Ефект |
g | global | Намира всяко съвпадение, вместо да спре при първото. |
i | ignoreCase | Буквите съвпадат независимо от регистъра. |
m | multiline | ^ и $ съвпадат в началото и края на всеки ред. |
s | dotAll | . съвпада и с нов ред. |
u | unicode | Третира шаблона като кодови точки; позволява \p{…} и \u{…}. |
y | sticky | Съвпада само на текущата позиция lastIndex. |
d | hasIndices | Връща началната и крайната позиция за всяка група за прихващане. |
Защита от катастрофален 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 в браузъра ви. Шаблонът и текстът се пазят само в собствения ви браузър, за да са там, когато се върнете.