Тестер на регулярни изрази
Тествайте JavaScript регулярни изрази на живо с откроени съвпадения, улавящи групи, замяна и обяснение на всеки елемент на шаблона на разбираем език.
| # | Позиция | Съвпадение | Групи |
|---|
Обяснение на шаблона
Внимание: повтаряща се група съдържа друг неограничен квантор, например (a+)+. Такива шаблони може да отнемат експоненциално време върху текст, който почти съвпада (катастрофално връщане назад).
Как да използвате тестера на regex
- Въведете шаблона в Регулярен израз, без заобикалящите наклонени черти. Наклонените черти и активните флагове се показват около полето, като в
/pattern/g. - Отметнете нужните Флагове:
g(глобално),i(без значение на регистъра),m(няколко реда),s(dotAll),u(unicode) илиy(sticky). - Поставете текста за търсене в Текст за тест. Съвпаденията се открояват, докато пишете, а таблицата изброява всяко съвпадение с позицията му и улавящите групи.
- За да изпробвате замяна, попълнете Замяна. Полето Резултат след замяната показва текста със заменено всяко съвпадение, готов за копиране.
- Прочетете Обяснение на шаблона, за да проверите какво прави всяка част от вашия regex. Не знаете откъде да започнете? Щракнете върху Зареди пример.
Какво показва тестерът
- Откроени съвпадения: всяко съвпадение в текста за тест е отбелязано, така че с един поглед виждате какво е уловено и какво е пропуснато.
- Таблица със съвпаденията: номерът на всяко съвпадение, позицията му (отместване в знаци от началото, броено от 0), съвпадналият текст и стойността на всяка улавяща група. Именуваните групи като
(?<year>\d{4})се показват под името си, а групите, които не са участвали в съвпадението, са показани като „(не е съвпаднала)“. Изброяват се първите 1000 съвпадения. - Замяна: заместващият текст използва синтаксиса на JavaScript:
$1или$2за номерирани групи,$<name>за именувани групи,$&за цялото съвпадение и$$за буквален знак долар. Без флагаgсе заменя само първото съвпадение. - Обяснение: шаблонът се разделя на елементи (буквален текст, класове знаци, котви, групи, квантори, lookaround, обратни препратки), всеки с кратко описание. Вложените групи са с отстъп, което прави дългите шаблони много по-лесни за преглед.
Флаговете накратко
| Флаг | Ефект |
|---|---|
g |
Намира всички съвпадения, вместо да спре при първото |
i |
Пренебрегва разликата между главни и малки букви |
m |
^ и $ съвпадат в началото и края на всеки ред |
s |
. съвпада и с нов ред |
u |
Пълен Unicode режим: \u{…}, \p{…} и емотиконите се третират като единични знаци |
y |
Sticky: всяко съвпадение трябва да започва точно там, където е свършило предишното |
Катастрофално връщане назад
Някои шаблони отнемат експоненциално време върху текст, който почти съвпада. Класическият пример е (a+)+$, тестван върху дълъг низ от a, следван от b: машината изпробва всички начини да раздели a-тата между двата квантора, преди да се откаже. Този проблем, известен като ReDoS, е събарял реални уебсайтове.
Този инструмент пази вашия браузър по три начина. Съпоставянето се изпълнява във фонов процес, който се спира след 1,5 секунди; текстът за тест е ограничен до 100 000 знака; а обяснението ви предупреждава, когато повтаряща се група съдържа друг неограничен квантор. Когато шаблон изтече по време, пренапишете го така, че всеки знак да може да се съпостави по един-единствен начин, например a+$ вместо (a+)+$.
Често задавани въпроси
Какъв вариант на regex използва този инструмент?
Използва машината на JavaScript (ECMAScript) във вашия браузър, точно както биха работили new RegExp() и String.prototype.replace() във вашия код. По-голямата част от синтаксиса е общ с PCRE, Python и Java, но някои възможности се различават: притежателни квантори и атомарни групи не съществуват в JavaScript, а lookbehind се поддържа във всички съвременни браузъри.
Защо шаблонът ми намира само едно съвпадение?
Флагът g е изключен. Без него JavaScript спира след първото съвпадение, а замяната променя само него.
Как да съпоставя буквална точка, скоба или въпросителен знак?
Екранирайте го с обратна наклонена черта: \., \[, \?. Обяснението показва екранираните знаци като „(екраниран)“, за да можете да проверите.
Изпраща ли се текстът ми някъде?
Не. Шаблонът и текстът се обработват само във вашия браузър, което прави инструмента безопасен за лог файлове или данни с лична информация.
Защо позицията се различава от колоната в моя редактор?
Позициите броят знаците от 0 през всички редове, както прави match.index в JavaScript. Новият ред се брои за един знак, а емотикон извън основната многоезична равнина се брои за два.
Сродни инструменти
- JSON форматиране и валидиране Безплатно форматиране и валидиране на JSON, което подрежда, минимизира и проверява JSON във вашия браузър, със синтактични грешки по ред и колона.
- URL кодиране и декодиране Безплатно URL кодиране и декодиране. Кодирайте параметри или цели адреси, декодирайте последователности %XX и третирайте + като интервал. Работи в браузъра.
- Генератор на хеш (MD5, SHA-256) Генерирайте MD5, SHA-1, SHA-256 и SHA-512 хешове на текст или файлове с произволен размер и проверявайте контролни суми. Всичко работи във вашия браузър.