Utilia

Тестер на регулярни изрази

Тествайте JavaScript регулярни изрази на живо с откроени съвпадения, улавящи групи, замяна и обяснение на всеки елемент на шаблона на разбираем език.

Флагове

Съвпадения
#ПозицияСъвпадениеГрупи

Обяснение на шаблона

    Как да използвате тестера на regex

    1. Въведете шаблона в Регулярен израз, без заобикалящите наклонени черти. Наклонените черти и активните флагове се показват около полето, като в /pattern/g.
    2. Отметнете нужните Флагове: g (глобално), i (без значение на регистъра), m (няколко реда), s (dotAll), u (unicode) или y (sticky).
    3. Поставете текста за търсене в Текст за тест. Съвпаденията се открояват, докато пишете, а таблицата изброява всяко съвпадение с позицията му и улавящите групи.
    4. За да изпробвате замяна, попълнете Замяна. Полето Резултат след замяната показва текста със заменено всяко съвпадение, готов за копиране.
    5. Прочетете Обяснение на шаблона, за да проверите какво прави всяка част от вашия 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. Новият ред се брои за един знак, а емотикон извън основната многоезична равнина се брои за два.