Regex-tester
Skriv et mønster, sæt flueben ved de flag, du har brug for, og indsæt noget tekst. Hvert match fremhæves, mens du skriver, og vises på en liste med position og indfangningsgrupper. Mønstret køres i browserens egen regex-motor til JavaScript, så resultaterne svarer til din kode, og teksten forlader aldrig din enhed.
0 tegn · 0 ord · 0 linjer
Match fremhæves her.0 tegn · 0 ord · 0 linjer
Kører udelukkende i denne browserfane. Din tekst bliver aldrig uploadet eller gemt.
JavaScript-regex-tokens
Kolonnen med første match blev lavet ved at køre hvert mønster på sin tekst med den JavaScript-motor, der byggede denne side.
| Token | Betydning | Mønster | Tekst | Første match |
|---|---|---|---|---|
\d | Ciffer 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Bogstav, ciffer eller understreg (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Mellemrum, inklusive tabulatorer og linjeskift | /\s+/ | two spaces | |
. | Ethvert tegn undtagen linjeskift (medmindre s) | /a.c/ | abc a-c | abc |
^ $ | Start og slutning af input (eller linje, med m) | /^\w+$/ | single | single |
[abc] | Et af de angivne tegn | /[aeiou]/ | rhythm and blues | a |
[^abc] | Ethvert tegn, der ikke er angivet | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 eller flere, 1 eller flere, 0 eller 1 | /colou?r/ | color colour | color |
{n,m} | Mellem n og m gange | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Indfangende gruppe | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Navngivet indfangende gruppe | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Gruppe uden indfangning | /(?:ab)+/ | ababab! | ababab |
a|b | Den ene eller den anden side | /cat|dog/ | hotdog | dog |
\b | Ordgrænse | /\bcat\b/ | concat cat | cat |
(?=…) | Efterfulgt af (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Ikke forudgået af (negativ lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Ethvert Unicode-bogstav (kræver u) | /\p{L}+/u | naïve 東京 | naïve |
De seks flag, og hvad de ændrer
g (global) finder alle match i stedet for at stoppe ved det første; uden det indeholder listen kun ét element. i ignorerer store og små bogstaver. m (multiline) får ^ og $ til at matche i starten og slutningen af hver linje i stedet for kun i hele teksten, hvilket er det, du skal bruge til et mønster som afsluttende mellemrum. s (dotAll, tilføjet i ES2018) lader . matche linjeskift. u (unicode) behandler tekst som kodepunkter, så en emoji tæller som ét tegn, og aktiverer property-escapes som \p{L} for ethvert bogstav i ethvert skriftsystem. y (sticky) matcher kun præcis på den aktuelle position, hvilket er den tilstand, tokenizere bruger. JavaScript har også d til match-indekser og v til mængdeoperationer i klasser; denne tester holder sig til de seks ovenfor.
Under testteksten viser hvert match sit indeks og sine grupper. Nummererede grupper kommer fra almindelige parenteser, (?:…) danner grupper uden at indfange, og (?<year>\d{4}) opretter en navngivet gruppe, der vises med sit navn, som ISO-dato-eksemplet viser. Menuen Common patterns indsætter afprøvede udgangspunkter for e-mailadresser, URL'er, IPv4-adresser, hex-farver, UUID'er, gentagne ord og afsluttende mellemrum. Betragt e-mailmønstret som en hurtig kontrol, ikke som validering: den fulde grammatik for adresser er langt mere tilladende, og den eneste rigtige test er at sende en besked.
Lookbehind og katastrofal backtracking
Lookarounds tester, hvad der omgiver en position, uden at forbruge det. Lookahead, (?=…) og (?!…), har altid været en del af JavaScript; lookbehind, (?<=…) og (?<!…), kom i ES2018 og nåede alle store browsere, da Safari 16.4 udgav det i 2023. Så (?<=\$)\d+ finder 42 i "$42" uden at medtage dollartegnet. I modsætning til mange andre motorer tillader JavaScript lookbehind af vilkårlig længde.
JavaScript-motoren bruger backtracking: når en sti fejler, går den tilbage og prøver alternativerne. Indlejrede kvantifikatorer som (a+)+$ giver den et eksponentielt antal måder at dele den samme tekst op på, så en streng med 30 a'er efterfulgt af et x kan tage sekunder, og et par bogstaver mere kan tage timer. Det kaldes catastrophic backtracking, og på servere bliver det til ReDoS, et denial-of-service-angreb; en enkelt WAF-regel med denne fejl lagde Cloudflares netværk ned i omkring en halv time den 2. juli 2019. Fordi denne tester kører i din fane, kan et sådant mønster fryse siden; genindlæs og omskriv det, så ingen to kvantifikatorer kan gøre krav på de samme tegn, ved at bruge strammere klasser som [^,]* i stedet for .*, eller ankre. Hvis du vil redigere selve teksten i stedet for at matche den, se tekstværktøjer; flere udviklerværktøjer finder du i oversigten over udviklerværktøjer.
Ofte stillede spørgsmål
- Hvorfor finder mit regulære udtryk kun ét match?
- Flaget g er slået fra. Uden det stopper motoren efter det første match. Sæt kryds ved g for at få alle forekomster; flaget y alene finder også flere, men kun når de følger direkte efter hinanden.
- Matcher \d cifre fra andre skriftsystemer i JavaScript?
- Nej. I JavaScript betyder \d kun 0 til 9 og \w kun ASCII-bogstaver, cifre og understreg, også med flaget u. Brug \p{Nd} eller \p{L} med u til andre skriftsystemer.
- Opfører et mønster, der er testet her, sig ens i Python eller PHP?
- Grundlæggende syntaks kan overføres, men detaljerne er forskellige: Pythons navngivne grupper skrives
(?P<name>…), PHP og Python understøtter possessive kvantifikatorer, som JavaScript mangler, og reglerne for lookbehind varierer. Test igen i målmotoren. - Hvordan matcher jeg et bogstaveligt punktum eller en parentes?
- Escape det med et backslash:
\.matcher et punktum og\[en indledende firkantet parentes. Inde i en tegnklasse er de fleste symboler allerede bogstavelige, så[.]matcher også kun et punktum. - Hvorfor frøs siden, mens jeg skrev et mønster?
- Mønstret udløste sandsynligvis catastrophic backtracking på din tekst. Genindlæs, og undgå derefter indlejrede kvantifikatorer som
(.*)*eller(a+)+, og lad hver del matche så lidt som muligt.