Utilia

Regex-tester

Test regulære udtryk i JavaScript live med fremhævede match, indfangende grupper, erstatning og en forklaring i klart sprog af hvert led i mønsteret.

Flag

Match
#PositionMatchGrupper

Forklaring af mønsteret

    Sådan bruger du regex-testeren

    1. Skriv dit mønster i Regulært udtryk uden de omgivende skråstreg. Skråstregerne og de aktive flag vises omkring feltet, som i /mønster/g.
    2. Sæt kryds ved de Flag, du har brug for: g (global), i (ignorér store/små bogstaver), m (flere linjer), s (dotAll), u (unicode) eller y (sticky).
    3. Indsæt den tekst, der skal søges i, i Testtekst. Match fremhæves, mens du skriver, og tabellen viser hvert match med position og indfangende grupper.
    4. Vil du prøve en erstatning, så udfyld Erstatning. Feltet Resultat efter erstatning viser teksten, hvor hvert match er erstattet, klar til at kopiere.
    5. Læs Forklaring af mønsteret for at tjekke, hvad hver del af dit regex gør. Ved du ikke, hvor du skal begynde? Klik på Indlæs et eksempel.

    Hvad testeren viser

    • Fremhævede match: hvert match i testteksten er markeret, så du med et blik kan se, hvad der fanges, og hvad der går forbi.
    • Tabel med match: nummeret på hvert match, dets position (tegnforskydning fra starten, talt fra 0), den matchede tekst og værdien af hver indfangende gruppe. Navngivne grupper som (?<year>\d{4}) vises under deres navn, og grupper, der ikke deltog i matchet, vises som »(ikke matchet)«. De første 1.000 match vises.
    • Erstatning: erstatningsteksten bruger JavaScripts syntaks: $1 eller $2 for nummererede grupper, $<name> for navngivne grupper, $& for hele matchet og $$ for et bogstaveligt dollartegn. Uden flaget g erstattes kun det første match.
    • Forklaring: mønsteret deles op i led (literal tekst, tegnklasser, ankre, grupper, kvantorer, lookarounds, tilbagehenvisninger), hver med en kort beskrivelse. Indlejrede grupper er indrykket, hvilket gør lange mønstre meget lettere at gennemgå.

    Flagene i korthed

    Flag Virkning
    g Finder alle match i stedet for at stoppe ved det første
    i Ignorerer forskellen på store og små bogstaver
    m ^ og $ matcher ved starten og slutningen af hver linje
    s . matcher også linjeskift
    u Fuld Unicode-tilstand: \u{…}, \p{…} og emoji behandles som enkelte tegn
    y Sticky: hvert match skal starte præcis dér, hvor det forrige sluttede

    Katastrofal backtracking

    Nogle mønstre tager eksponentiel tid på tekst, der næsten matcher. Det klassiske eksempel er (a+)+$ testet mod en lang række a efterfulgt af et b: motoren prøver alle måder at fordele a‘erne mellem de to kvantorer på, før den giver op. Dette problem, kendt som ReDoS, har fået rigtige websites til at bryde sammen.

    Værktøjet beskytter din browser på tre måder. Matchningen kører i en baggrundsarbejder (worker), som stoppes efter 1,5 sekunder; testteksten er begrænset til 100.000 tegn; og forklaringen advarer dig, når en gentaget gruppe indeholder endnu en åben kvantor. Når et mønster løber ud i timeout, så skriv det om, så hvert tegn kun kan matches på én måde, for eksempel a+$ i stedet for (a+)+$.

    Ofte stillede spørgsmål

    Hvilken variant af regulære udtryk bruger værktøjet?

    Det bruger din browsers JavaScript-motor (ECMAScript), præcis som new RegExp() og String.prototype.replace() ville gøre i din kode. Det meste af syntaksen deles med PCRE, Python og Java, men nogle funktioner er forskellige: possessive kvantorer og atomare grupper findes ikke i JavaScript, og lookbehind understøttes i alle nuværende browsere.

    Hvorfor finder mit mønster kun ét match?

    Flaget g er slået fra. Uden det stopper JavaScript efter det første match, og erstatningen ændrer kun det ene.

    Hvordan matcher jeg et bogstaveligt punktum, en kantet parentes eller et spørgsmålstegn?

    Escap det med en omvendt skråstreg: \., \[, \?. Forklaringen viser escapede tegn som »(escapet)«, så du kan kontrollere det.

    Bliver min tekst sendt nogen steder hen?

    Nej. Mønsteret og teksten behandles kun i din browser, hvilket gør værktøjet sikkert til logfiler eller data med personoplysninger.

    Hvorfor er positionen anderledes end kolonnen i min editor?

    Positioner tæller tegn fra 0 på tværs af alle linjer, sådan som JavaScripts match.index gør. Linjeskift tæller som ét tegn, og en emoji uden for Basic Multilingual Plane tæller som to.