Utilia

Regex tester

Testiraj JavaScript regularne izraze uživo s označenim podudaranjima, grupama za hvatanje, zamjenom i objašnjenjem svakog elementa uzorka na običnom jeziku.

Zastavice

Podudaranja
#PozicijaPodudaranjeGrupe

Objašnjenje uzorka

    Kako koristiti regex tester

    1. Upiši uzorak u polje Regularni izraz, bez okolnih kosih crta. Kose crte i aktivne zastavice prikazane su oko polja, kao u /uzorak/g.
    2. Označi Zastavice koje trebaš: g (global), i (ignoriši velika/mala slova), m (multiline), s (dotAll), u (unicode) ili y (sticky).
    3. Zalijepi tekst koji se pretražuje u Testni tekst. Podudaranja se označavaju dok pišeš, a tabela navodi svako podudaranje s pozicijom i grupama za hvatanje.
    4. Za probu zamjene popuni Zamjena. Polje Rezultat nakon zamjene prikazuje tekst u kojem je zamijenjeno svako podudaranje, spreman za kopiranje.
    5. Pročitaj Objašnjenje uzorka da provjeriš šta radi svaki dio tvog regexa. Ne znaš odakle početi? Klikni na Učitaj primjer.

    Šta tester prikazuje

    • Označena podudaranja: svako podudaranje u testnom tekstu je označeno, pa jednim pogledom vidiš šta je uhvaćeno, a šta propušteno.
    • Tabela podudaranja: redni broj svakog podudaranja, njegova pozicija (pomak u znakovima od početka, računajući od 0), prepoznati tekst i vrijednost svake grupe za hvatanje. Imenovane grupe poput (?<year>\d{4}) prikazuju se pod svojim imenom, a grupe koje nisu učestvovale u podudaranju prikazuju se kao „(nije prepoznato)“. Navodi se prvih 1 000 podudaranja.
    • Zamjena: tekst zamjene koristi JavaScript sintaksu: $1 ili $2 za numerisane grupe, $<name> za imenovane grupe, $& za cijelo podudaranje i $$ za doslovni znak dolara. Bez zastavice g zamjenjuje se samo prvo podudaranje.
    • Objašnjenje: uzorak se dijeli na tokene (doslovni tekst, klase znakova, sidra, grupe, kvantifikatori, lookaround, povratne reference), svaki s kratkim opisom. Ugniježđene grupe su uvučene, što dugačke uzorke čini mnogo lakšim za pregled.

    Zastavice ukratko

    Zastavica Efekt
    g Pronalazi sva podudaranja umjesto da stane na prvom
    i Ignoriše razliku između velikih i malih slova
    m ^ i $ prepoznaju početak i kraj svakog reda
    s . prepoznaje i prelome redova
    u Puni Unicode način: \u{…}, \p{…} i emoji se obrađuju kao pojedinačni znakovi
    y Sticky: svako podudaranje mora početi tačno tamo gdje je prethodno završilo

    Katastrofalni backtracking

    Neki uzorci traju eksponencijalno dugo na tekstu koji se skoro podudara. Klasičan primjer je (a+)+$ testiran na dugom nizu znakova a iza kojeg slijedi b: pogon isprobava svaki način raspodjele znakova a između dva kvantifikatora prije nego što odustane. Taj problem, poznat kao ReDoS, obarao je prave web stranice.

    Alat štiti tvoj preglednik na tri načina. Traženje se izvršava u pozadinskom radniku (worker) koji se zaustavlja nakon 1,5 sekunde; testni tekst je ograničen na 100 000 znakova; a objašnjenje te upozorava kada ponovljena grupa sadrži još jedan neograničen kvantifikator. Kada uzorku istekne vrijeme, prepiši ga tako da se svaki znak može prepoznati na samo jedan način, na primjer a+$ umjesto (a+)+$.

    Sve radi u tvom pregledniku. Ništa što upišeš ili zalijepiš ne šalje se na server.

    Česta pitanja

    Koji regex dijalekt ovaj alat koristi?

    Koristi JavaScript (ECMAScript) pogon tvog preglednika, tačno kao new RegExp() i String.prototype.replace() u tvom kodu. Većina sintakse zajednička je s PCRE-om, Pythonom i Javom, ali neke mogućnosti se razlikuju: posesivni kvantifikatori i atomske grupe ne postoje u JavaScriptu, a lookbehind podržavaju svi aktuelni preglednici.

    Zašto moj uzorak pronalazi samo jedno podudaranje?

    Zastavica g je isključena. Bez nje JavaScript staje nakon prvog podudaranja, a zamjena mijenja samo to jedno.

    Kako da prepoznam doslovnu tačku, zagradu ili upitnik?

    Izbjegni ih obrnutom kosom crtom: \., \[, \?. Objašnjenje prikazuje izbjegnute znakove kao „(izbjegnut)“ da možeš provjeriti.

    Šalje li se moj tekst negdje?

    Ne. Uzorak i tekst obrađuju se samo u tvom pregledniku, pa je ovaj alat siguran za log datoteke ili podatke koji sadrže lične informacije.

    Zašto se pozicija razlikuje od kolone u mom uređivaču?

    Pozicije broje znakove od 0, kroz sve redove, kao match.index u JavaScriptu. Prelom reda računa se kao jedan znak, a emoji izvan osnovne višejezične ravni (Basic Multilingual Plane) računa se kao dva.