Utilia

Regex tester

Testiraj JavaScript regularne izraze uživo: istaknuta poklapanja, grupe za hvatanje, zamena i objašnjenje svakog tokena običnim jezikom.

Zastavice

Poklapanja
#PozicijaPoklapanjeGrupe

Objašnjenje obrasca

    Kako se koristi regex tester

    1. Upiši obrazac u Regularni izraz, bez okolnih kosih crta. Kose crte i aktivne zastavice prikazuju se oko polja, kao u /obrazac/g.
    2. Označi Zastavice koje ti trebaju: g (global), i (ignoriši veličinu slova), m (više redova), s (dotAll), u (unicode) ili y (sticky).
    3. Nalepi tekst koji se pretražuje u Probni tekst. Poklapanja se ističu dok kucaš, a tabela navodi svako poklapanje sa pozicijom i grupama za hvatanje.
    4. Da isprobaš zamenu, popuni Zamena. Polje Rezultat posle zamene pokazuje tekst sa zamenjenim svim poklapanjima, spreman za kopiranje.
    5. Pročitaj Objašnjenje obrasca da proveriš šta radi svaki deo tvog regexa. Ne znaš odakle da počneš? Klikni Učitaj primer.

    Šta tester prikazuje

    • Istaknuta poklapanja: svako poklapanje u probnom tekstu je označeno, pa jednim pogledom vidiš šta je uhvaćeno, a šta promašeno.
    • Tabela poklapanja: redni broj svakog poklapanja, njegova pozicija (pomak u znakovima od početka, računajući od 0), poklopljeni tekst i vrednost svake grupe za hvatanje. Imenovane grupe kao (?<year>\d{4}) prikazuju se pod svojim imenom, a grupe koje nisu učestvovale u poklapanju prikazuju se kao „(nije poklopljeno)“. Navodi se prvih 1.000 poklapanja.
    • Zamena: tekst zamene koristi JavaScript sintaksu: $1 ili $2 za numerisane grupe, $<name> za imenovane grupe, $& za celo poklapanje i $$ za doslovni znak dolara. Bez zastavice g zamenjuje se samo prvo poklapanje.
    • Objašnjenje: obrazac se deli na tokene (doslovni tekst, klase znakova, sidra, grupe, kvantifikatori, lookaround, povratne reference), svaki sa kratkim opisom. Ugnežđene grupe su uvučene, što dugačke obrasce čini mnogo lakšim za pregled.

    Zastavice ukratko

    Zastavica Dejstvo
    g Nalazi sva poklapanja umesto da stane na prvom
    i Ignoriše razliku između velikih i malih slova
    m ^ i $ poklapaju početak i kraj svakog reda
    s . poklapa i prelome redova
    u Pun Unicode režim: \u{…}, \p{…} i emodži se obrađuju kao jedan znak
    y Sticky: svako poklapanje mora da počne tačno tamo gde se prethodno završilo

    Katastrofalno vraćanje unazad

    Neki obrasci troše eksponencijalno vreme na tekstu koji se skoro poklapa. Klasičan primer je (a+)+$ testiran na dugom nizu slova a iza kojeg sledi b: mehanizam isprobava svaki način raspodele slova a između dva kvantifikatora pre nego što odustane. Ovaj problem, poznat kao ReDoS, obarao je prave sajtove.

    Alat štiti tvoj pregledač na tri načina. Poklapanje se izvršava u radniku u pozadini koji se zaustavlja posle 1,5 sekunde; probni tekst je ograničen na 100.000 znakova; a objašnjenje te upozorava kada ponovljena grupa sadrži još jedan otvoren kvantifikator. Kada obrazac prekorači vreme, prepiši ga tako da se svaki znak može poklopiti na samo jedan način, na primer a+$ umesto (a+)+$.

    Česta pitanja

    Koji regex dijalekat koristi ovaj alat?

    Koristi JavaScript (ECMAScript) mehanizam tvog pregledača, baš kao što bi new RegExp() i String.prototype.replace() u tvom kodu. Većina sintakse je zajednička sa PCRE-om, Python-om i Javom, ali neke mogućnosti se razlikuju: posesivni kvantifikatori i atomske grupe ne postoje u JavaScript-u, a lookbehind podržavaju svi aktuelni pregledači.

    Zašto moj obrazac nalazi samo jedno poklapanje?

    Zastavica g je isključena. Bez nje JavaScript staje posle prvog poklapanja, a zamena menja samo njega.

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

    Izbegni ga kosom crtom: \., \[, \?. Objašnjenje prikazuje izbegnute znakove kao „(izbegnut)“ da možeš da proveriš.

    Da li se moj tekst negde šalje?

    Ne. Obrazac i tekst se obrađuju samo u tvom pregledaču, zbog čega je ovaj alat bezbedan za log fajlove ili podatke sa ličnim informacijama.

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

    Pozicije broje znakove od 0, preko svih redova, kao što to radi match.index u JavaScript-u. Prelom reda računa se kao jedan znak, a emodži van osnovne višejezične ravni računa se kao dva.