UltKit

Regex-testare

Skriv ett mönster, kryssa i de flaggor du behöver och klistra in lite text. Varje träff markeras medan du skriver och listas med position och fångstgrupper. Mönstret körs i webbläsarens egen regexmotor för JavaScript, så resultaten stämmer med din kod och texten stannar på din enhet.

Flaggor

0 tecken · 0 ord · 0 rader

Träffar markeras här.

0 tecken · 0 ord · 0 rader

Körs helt i den här webbläsarfliken. Din text laddas aldrig upp eller sparas.

Regex-tokens i JavaScript

Kolumnen för första träff skapades genom att köra varje mönster på sin text med den JavaScript-motor som byggde den här sidan.

TokenBetydelseMönsterTextFörsta träff
\dSiffra 0–9/\d+/Order 66 shipped66
\wBokstav, siffra eller understreck (ASCII)/\w+/snake_case-idsnake_case
\sBlanksteg, inklusive tabbar och radbrytningar/\s+/two spaces
.Valfritt tecken utom radbrytning (om inte s)/a.c/abc a-cabc
^ $Början och slut av indata (eller rad, med m)/^\w+$/singlesingle
[abc]Ett av de listade tecknen/[aeiou]/rhythm and bluesa
[^abc]Valfritt tecken som inte listas/[^0-9]+/2026-10-18-
* + ?0 eller fler, 1 eller fler, 0 eller 1/colou?r/color colourcolor
{n,m}Mellan n och m gånger/\d{2,4}/7 42 1999 12345642
(…)Fångande grupp/(\d+)px/width: 320px320px
(?<name>…)Namngiven fångande grupp/(?<h>\d\d):(?<m>\d\d)/at 09:4509:45
(?:…)Grupp utan fångst/(?:ab)+/ababab!ababab
a|bNågon av sidorna/cat|dog/hotdogdog
\bOrdgräns/\bcat\b/concat catcat
(?=…)Följs av (lookahead)/\d+(?=%)/50 of 75%75
(?<!…)Inte föregången av (negativ lookbehind)/(?<!\$)\b\d+/$30 or 4040
\p{L}Valfri Unicode-bokstav (kräver u)/\p{L}+/unaïve 東京naïve

De sex flaggorna och vad de ändrar

g (global) hittar alla träffar i stället för att stanna vid den första; utan den innehåller listan en post. i ignorerar skiftläge. m (flerradsläge) gör att ^ och $ matchar början och slutet på varje rad i stället för bara på hela texten, vilket är vad du vill ha för ett mönster som blanksteg i radslut. s (dotAll, tillagt i ES2018) låter . matcha radbrytningar också. u (unicode) behandlar texten som kodpunkter, så en emoji räknas som ett tecken, och aktiverar egenskapsescapes som \p{L} för vilken bokstav som helst i vilket skriftsystem som helst. y (sticky) matchar bara exakt på den aktuella positionen, det läge som tokeniserare använder. JavaScript har också d för matchindex och v för mängdoperationer i klasser; den här testaren håller sig till de sex ovan.

Under testtexten visas varje träff med sitt index och sina grupper. Numrerade grupper kommer från vanliga parenteser, (?:…) skapar grupper utan fångst och (?<year>\d{4}) skapar en namngiven grupp som visas med sitt namn, som ISO-datumexemplet visar. Menyn Vanliga mönster infogar testade utgångspunkter för e-postadresser, URL:er, IPv4-adresser, hexfärger, UUID:n, upprepade ord och blanksteg i radslut. Se e-postmönstret som en rimlighetskontroll, inte som validering: grammatiken för en hel adress är mycket friare, och det enda riktiga testet är att skicka ett meddelande.

Lookbehind och katastrofal backtracking

Lookarounds testar vad som omger en position utan att förbruka det. Lookahead, (?=…) och (?!…), har alltid funnits i JavaScript; lookbehind, (?<=…) och (?<!…), kom i ES2018 och nådde alla stora webbläsare när Safari 16.4 införde det 2023. Så (?<=\$)\d+ hittar 42 i "$42" utan att ta med dollartecknet. Till skillnad från många andra motorer tillåter JavaScript lookbehind av valfri längd.

JavaScript-motorn använder backtracking: när en väg misslyckas går den tillbaka och prövar alternativen. Nästlade kvantifierare som (a+)+$ ger den ett exponentiellt antal sätt att dela upp samma text, så en sträng med 30 a följt av ett x kan ta sekunder och några bokstäver till kan ta timmar. Det kallas katastrofal backtracking, och på servrar blir det ReDoS, en överbelastningsattack; en enda WAF-regel med det felet slog ut Cloudflares nätverk i ungefär en halvtimme den 2 juli 2019. Eftersom testaren körs i din flik kan ett sådant mönster frysa sidan; ladda om och skriv om det så att inga två kvantifierare kan göra anspråk på samma tecken, med snävare klasser som [^,]* i stället för .*, eller ankare. För att redigera själva texten i stället för att matcha den, se textverktygen; fler utvecklarverktyg finns i utvecklarverktygen.

Vanliga frågor

Varför hittar mitt reguljära uttryck bara en träff?
Flaggan g är avstängd. Utan den stannar motorn efter den första träffen. Bocka i g för att lista alla förekomster; flaggan y ensam hittar också flera, men bara när de följer direkt på varandra.
Matchar \d siffror från andra skriftsystem i JavaScript?
Nej. I JavaScript betyder \d bara 0 till 9 och \w bara ASCII-bokstäver, siffror och understreck, även med flaggan u. Använd \p{Nd} eller \p{L} med u för andra skriftsystem.
Beter sig ett mönster som testats här likadant i Python eller PHP?
Grundsyntaxen fungerar likadant, men detaljerna skiljer sig: Pythons namngivna grupper skrivs (?P<name>…), PHP och Python stöder possessiva kvantifierare som JavaScript saknar, och reglerna för lookbehind varierar. Testa om i målmotorn.
Hur matchar jag en bokstavlig punkt eller hakparentes?
Escapa det med omvänt snedstreck: \. matchar en punkt och \[ en inledande hakparentes. Inuti en teckenklass är de flesta symboler redan literala, så [.] matchar också bara en punkt.
Varför frös sidan medan jag skrev ett mönster?
Mönstret orsakade troligen katastrofal backtracking på din text. Ladda om, undvik sedan nästlade kvantifierare som (.*)* eller (a+)+ och låt varje del matcha så lite som möjligt.