Regex-testare för JavaScript

Skriv ett reguljärt uttryck och se varje träff markerad medan du skriver, med fångstgrupper, förhandsvisning av ersättning och ett bibliotek med färdiga mönster.

Körs i din webbläsareIngen registreringInget laddas upp

Markerade träffar

    
Använd $1, $<name>, $& (hela träffen)
Träffdetaljer
#IndexTräffGrupper
Regex-fusklapp
.Valfritt tecken utom radbrytning (alla med s)
\d \w \sSiffra, ordtecken, blanktecken
\D \W \SEj siffra, ej ordtecken, ej blanktecken
[abc] [^abc]Något av / inget av a, b, c
[a-z0-9]Teckenintervall
\p{L} \p{N}Unicode-bokstav / -siffra (kräver u)
^ $Början / slutet av indata (av rad med m)
\b \BOrdgräns / inte en ordgräns
* + ?0 eller fler, 1 eller fler, 0 eller 1
{n} {n,} {n,m}Exakt n, minst n, mellan n och m
*? +? ??Lat (så få som möjligt)
a|ba eller b
(…)Fångstgrupp, refereras som $1
(?<name>…)Namngiven grupp, $<name>
(?:…)Icke-fångande grupp
\1 \k<name>Bakåtreferens
(?=…) (?!…)Lookahead / negativ lookahead
(?<=…) (?<!…)Lookbehind / negativ lookbehind
\. \* \\Escapade bokstavliga tecken
\n \t \rRadbrytning, tabb, vagnretur
\uFFFFUnicode-kodenhet
\u{1F600}Kodpunkt (kräver u)
$&Hela träffen i en ersättning
$` $'Text före / efter träffen

Så använder du Regex-testare

  1. Skriv ditt mönster mellan snedstrecken, utan de omgivande /.
  2. Slå på flaggor som g (alla träffar), i (ignorera skiftläge) och m (flerrads).
  3. Klistra in din testtext. Träffarna markeras till höger och listas nedanför med index och fångstgrupper.
  4. Kryssa i Ersätt och ange en ersättning som $1 eller $<name> för att förhandsgranska String.replace.
  5. Välj ett mönster i Mönsterbiblioteket för att utgå från ett testat regex för e-post, URL, IP eller datum.

Reguljära uttryck i JavaScript

Den här testaren använder webbläsarens egen RegExp-motor, så resultaten är exakt vad String.match, matchAll, replace och RegExp.exec returnerar i JavaScript och Node.js. Det inkluderar modern syntax: namngivna grupper (?<name>…), lookbehind (?<=…), Unicode-egenskaper som \p{L} med flaggan u och träffindex med flaggan d.

Vad flaggorna gör

FlaggaNamnEffekt
gglobalHittar alla träffar i stället för att stanna vid den första.
iignoreCaseBokstäver matchar oavsett skiftläge.
mmultiline^ och $ matchar i början och slutet av varje rad.
sdotAll. matchar även radbrytningar.
uunicodeBehandlar mönstret som kodpunkter; aktiverar \p{…} och \u{…}.
ystickyMatchar bara vid aktuell lastIndex-position.
dhasIndicesRapporterar start- och slutposition för varje fångstgrupp.

Skydd mot katastrofal backtracking

Mönster med nästlade kvantifierare, som (a+)+$ eller (\w|\d)*x, kan ta exponentiell tid på indata som nästan matchar. På en vanlig webbsida fryser det fliken. Här körs varje matchning i en Web Worker i bakgrunden som stoppas efter en sekund, och du får en tydlig varning i stället för en webbläsare som hänger sig. Samma mönster i produktionskod kan vara en ReDoS-sårbarhet, så behandla varningen som en bugg att åtgärda.

Tips för bättre regex

  • Förankra mönster med ^ och $ när du validerar hela värden, annars godkänns en träff var som helst i strängen.
  • Föredra specifika klasser som [^"]* framför .*; de är snabbare och undviker att matcha för mycket.
  • Använd icke-fångande grupper (?:…) när du inte behöver det fångade värdet.
  • Namnge dina grupper. match.groups.year är lättare att läsa än match[1].

Vanliga frågor

Vilken regex-variant använder testaren?
JavaScript (ECMAScript), via webbläsarens inbyggda RegExp. Det mesta av syntaxen delas med PCRE, Python och Java, men funktioner som possessiva kvantifierare, atomära grupper och inline-modifierare som (?i) finns inte i JavaScript.
Varför hittar mitt mönster bara en träff?
Utan flaggan g (global) stannar JavaScript efter första träffen. Slå på g för att hitta alla förekomster.
Hur refererar jag till grupper i ersättningen?
Använd $1, $2… för numrerade grupper, $<name> för namngivna grupper, $& för hela träffen och $$ för ett bokstavligt dollartecken.
Varför avbröts testaren med en timeout?
Mönstret tog mer än en sekund på din indata, vilket nästan alltid betyder katastrofal backtracking. Leta efter nästlade kvantifierare som (x+)+ eller överlappande alternativ som (a|a)* och skriv om dem så att varje tecken bara kan matchas på ett sätt.
Skickas mina testdata någonstans?
Nej. Matchningen körs lokalt i en Web Worker i din webbläsare. Ditt mönster och din text sparas bara i din egen webbläsare så att de finns kvar när du kommer tillbaka.

Relaterade verktyg