Utilia

Regex-testare

Testa reguljära uttryck i JavaScript live med markerade träffar, fångande grupper, ersättning och en förklaring av varje del av mönstret.

Flaggor

Träffar
#PositionTräffGrupper

Förklaring av mönstret

    Så använder du regex-testaren

    1. Skriv ditt mönster i Reguljärt uttryck, utan de omgivande snedstrecken. Snedstrecken och de aktiva flaggorna visas runt fältet, som i /mönster/g.
    2. Kryssa i de Flaggor du behöver: g (global), i (ignorera skiftläge), m (flera rader), s (dotAll), u (unicode) eller y (sticky).
    3. Klistra in texten som ska sökas igenom i Testtext. Träffarna markeras medan du skriver, och tabellen listar varje träff med position och fångande grupper.
    4. Vill du prova en ersättning fyller du i Ersättning. Rutan Resultat efter ersättning visar texten med alla träffar utbytta, redo att kopieras.
    5. Läs Förklaring av mönstret för att kontrollera vad varje del av ditt regex gör. Osäker på var du ska börja? Klicka på Ladda ett exempel.

    Det här visar testaren

    • Markerade träffar: varje träff i testtexten markeras, så att du direkt ser vad som fångas och vad som missas.
    • Tabellen med träffar: numret på varje träff, dess position (teckenförskjutning från början, räknat från 0), den matchade texten och värdet för varje fångande grupp. Namngivna grupper som (?<year>\d{4}) visas under sitt namn, och grupper som inte deltog i träffen visas som ”(ingen träff)”. De första 1 000 träffarna listas.
    • Ersättning: ersättningstexten använder JavaScript-syntax: $1 eller $2 för numrerade grupper, $<name> för namngivna grupper, $& för hela träffen och $$ för ett vanligt dollartecken. Utan flaggan g ersätts bara den första träffen.
    • Förklaring: mönstret delas upp i element (literal text, teckenklasser, ankare, grupper, kvantifierare, lookarounds, bakåtreferenser), vart och ett med en kort beskrivning. Nästlade grupper dras in, vilket gör långa mönster mycket lättare att granska.

    Flaggorna i korthet

    Flagga Effekt
    g Hittar alla träffar i stället för att stanna vid den första
    i Ignorerar skillnaden mellan versaler och gemener
    m ^ och $ matchar i början och slutet av varje rad
    s . matchar även radbrytningar
    u Fullt Unicode-läge: \u{…}, \p{…} och emoji hanteras som enskilda tecken
    y Sticky: varje träff måste börja exakt där den förra slutade

    Tänk på att \w och \b i JavaScript bara räknar ASCII-bokstäver som ordtecken, så å, ä och ö matchas inte av \w. Vill du matcha svenska ord kan du använda [\p{L}\d_] eller \p{L}+ tillsammans med flaggan u.

    Katastrofal backtracking

    Vissa mönster tar exponentiell tid på text som nästan matchar. Det klassiska exemplet är (a+)+$ testat mot en lång rad a följd av ett b: motorn prövar alla sätt att fördela a:na mellan de två kvantifierarna innan den ger upp. Problemet, känt som ReDoS, har fått riktiga webbplatser att gå ner.

    Verktyget skyddar din webbläsare på tre sätt. Matchningen körs i en bakgrundsworker som stoppas efter 1,5 sekunder, testtexten är begränsad till 100 000 tecken och förklaringen varnar dig när en upprepad grupp innehåller en annan öppen kvantifierare. När ett mönster tar för lång tid kan du skriva om det så att varje tecken bara kan matchas på ett sätt, till exempel a+$ i stället för (a+)+$.

    Vanliga frågor

    Vilken regex-variant använder verktyget?

    Det använder webbläsarens motor för JavaScript (ECMAScript), precis som new RegExp() och String.prototype.replace() skulle göra i din kod. Det mesta av syntaxen är gemensam med PCRE, Python och Java, men vissa funktioner skiljer sig: possessiva kvantifierare och atomära grupper finns inte i JavaScript, och lookbehind stöds i alla aktuella webbläsare.

    Varför hittar mitt mönster bara en träff?

    Flaggan g är avstängd. Utan den stannar JavaScript efter första träffen, och ersättningen ändrar bara den.

    Hur matchar jag en vanlig punkt, hakparentes eller ett frågetecken?

    Skydda tecknet med ett omvänt snedstreck: \., \[, \?. Förklaringen visar skyddade tecken med ”(skyddat)” så att du kan kontrollera.

    Skickas min text någonstans?

    Nej. Mönstret och texten behandlas bara i din webbläsare, vilket gör verktyget säkert för loggfiler och data som innehåller personuppgifter.

    Varför skiljer sig positionen från kolumnen i min redigerare?

    Positionerna räknar tecken från 0, över alla rader, på samma sätt som JavaScripts match.index. Radbrytningar räknas som ett tecken, och en emoji utanför Unicodes grundläggande flerspråkiga plan (BMP) räknas som två.