Utilia

Preizkus regularnih izrazov

Sproti preizkusi regularne izraze JavaScripta z označenimi ujemanji, zajemalnimi skupinami, zamenjavo in razlago vsakega dela vzorca v preprostem jeziku.

Zastavice

Ujemanja
#MestoUjemanjeSkupine

Razlaga vzorca

    Kako uporabljati preizkus regularnih izrazov

    1. Vzorec vpiši v Regularni izraz, brez obdajajočih poševnic. Poševnici in aktivne zastavice so prikazane okoli polja, kot v /vzorec/g.
    2. Obkljukaj potrebne Zastavice: g (globalno), i (ne razlikuj velikosti črk), m (večvrstično), s (dotAll), u (unicode) ali y (lepljivo).
    3. Besedilo za iskanje prilepi v Testno besedilo. Ujemanja so med tipkanjem označena, tabela pa navede vsako ujemanje z njegovim mestom in zajemalnimi skupinami.
    4. Če želiš preizkusiti zamenjavo, izpolni Zamenjava. Polje Rezultat po zamenjavi pokaže besedilo z zamenjanim vsakim ujemanjem, pripravljeno za kopiranje.
    5. Preberi Razlago vzorca, da preveriš, kaj počne vsak del tvojega regularnega izraza. Ne veš, kje začeti? Klikni Naloži primer.

    Kaj prikaže preizkus

    • Označena ujemanja: vsako ujemanje v testnem besedilu je označeno, tako da na prvi pogled vidiš, kaj se ujame in kaj ne.
    • Tabela ujemanj: številka vsakega ujemanja, njegovo mesto (odmik znakov od začetka, štet od 0), ujeto besedilo in vrednost vsake zajemalne skupine. Imenovane skupine, kot je (?<leto>\d{4}), se pojavijo pod svojim imenom, skupine, ki pri ujemanju niso sodelovale, pa so prikazane kot »(ni ujemanja)«. Navedenih je prvih 1000 ujemanj.
    • Zamenjava: besedilo zamenjave uporablja sintakso JavaScripta: $1 ali $2 za oštevilčene skupine, $<ime> za imenovane skupine, $& za celotno ujemanje in $$ za dobesedni znak dolarja. Brez zastavice g se zamenja samo prvo ujemanje.
    • Razlaga: vzorec je razdeljen na žetone (dobesedno besedilo, razredi znakov, sidra, skupine, kvantifikatorji, pogledi okoli, povratne reference), vsak s kratkim opisom. Gnezdene skupine so zamaknjene, kar močno olajša pregledovanje dolgih vzorcev.

    Zastavice na kratko

    Zastavica Učinek
    g Poišče vsa ujemanja, namesto da se ustavi pri prvem
    i Ne razlikuje med velikimi in malimi črkami
    m ^ in $ se ujameta na začetku in koncu vsake vrstice
    s . ujame tudi prelome vrstic
    u Poln način Unicode: \u{…}, \p{…} in emoji se obravnavajo kot posamezni znaki
    y Lepljivo: vsako ujemanje se mora začeti natanko tam, kjer se je prejšnje končalo

    Katastrofalno vračanje

    Nekateri vzorci potrebujejo eksponentni čas pri besedilu, ki se skoraj ujema. Klasičen primer je (a+)+$, preizkušen na dolgem nizu črk a, ki mu sledi b: pogon preizkusi vse načine razdelitve črk a med oba kvantifikatorja, preden obupa. Ta težava, znana kot ReDoS, je že podrla prave spletne strani.

    To orodje tvoj brskalnik ščiti na tri načine. Ujemanje teče v delavcu v ozadju, ki se ustavi po 1,5 sekunde; testno besedilo je omejeno na 100 000 znakov; razlaga pa te opozori, kadar ponovljena skupina vsebuje še en odprt kvantifikator. Ko vzorec prekorači čas, ga napiši tako, da se lahko vsak znak ujame le na en način, na primer a+$ namesto (a+)+$.

    Pogosta vprašanja

    Katero različico regex to orodje uporablja?

    Uporablja pogon JavaScripta (ECMAScript) v tvojem brskalniku, natanko tako kot new RegExp() in String.prototype.replace() v tvoji kodi. Večina sintakse je skupna s PCRE, Pythonom in Javo, nekatere možnosti pa se razlikujejo: posesivni kvantifikatorji in atomske skupine v JavaScriptu ne obstajajo, pogled nazaj pa podpirajo vsi sodobni brskalniki.

    Zakaj moj vzorec najde samo eno ujemanje?

    Zastavica g je izklopljena. Brez nje se JavaScript ustavi po prvem ujemanju, zamenjava pa spremeni samo to.

    Kako ujamem dobesedno piko, oglati oklepaj ali vprašaj?

    Označi ga s poševnico nazaj: \., \[, \?. Razlaga prikaže ubežne znake kot »(ubežni)«, da jih lahko preveriš.

    Ali se moje besedilo kam pošilja?

    Ne. Vzorec in besedilo se obdelata samo v tvojem brskalniku, zato je to orodje varno za dnevniške datoteke ali podatke z osebnimi podatki.

    Zakaj se mesto razlikuje od stolpca v mojem urejevalniku?

    Mesta štejejo znake od 0 čez vse vrstice, kot to počne match.index v JavaScriptu. Prelom vrstice šteje za en znak, emoji zunaj osnovne večjezične ravnine pa za dva.