Regex-tester
Skriv inn et mønster, kryss av for flaggene du trenger, og lim inn tekst: hvert treff utheves mens du skriver og listes opp med posisjon og fangstgrupper. Mønsteret kjøres i nettleserens egen JavaScript-regex-motor, så resultatene stemmer med koden din, og teksten blir værende på enheten din.
0 tegn · 0 ord · 0 linjer
Treff utheves her.0 tegn · 0 ord · 0 linjer
Kjører helt i denne nettleserfanen. Teksten din lastes aldri opp eller lagres.
JavaScript regex-tokens
Kolonnen for første treff ble laget ved å kjøre hvert mønster på teksten sin med JavaScript-motoren som bygget denne siden.
| Token | Betydning | Mønster | Tekst | Første treff |
|---|---|---|---|---|
\d | Siffer 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Bokstav, siffer eller understrek (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Blanktegn, inkludert tabulatorer og linjeskift | /\s+/ | two spaces | |
. | Alle tegn unntatt linjeskift (med mindre s) | /a.c/ | abc a-c | abc |
^ $ | Start og slutt på inndata (eller linje, med m) | /^\w+$/ | single | single |
[abc] | Ett av de oppførte tegnene | /[aeiou]/ | rhythm and blues | a |
[^abc] | Alle tegn som ikke er oppført | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 eller flere, 1 eller flere, 0 eller 1 | /colou?r/ | color colour | color |
{n,m} | Mellom n og m ganger | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Fangstgruppe | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Navngitt fangstgruppe | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Gruppe uten fangst | /(?:ab)+/ | ababab! | ababab |
a|b | Begge sider | /cat|dog/ | hotdog | dog |
\b | Ordgrense | /\bcat\b/ | concat cat | cat |
(?=…) | Etterfulgt av (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Ikke foregått av (negativ lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Alle Unicode-bokstaver (krever u) | /\p{L}+/u | naïve 東京 | naïve |
De seks flaggene og hva de endrer
g (global) finner alle treff i stedet for å stoppe ved det første; uten den inneholder listen ett treff. i ignorerer store og små bokstaver. m (flerlinjet) gjør at ^ og $ treffer start og slutt på hver linje i stedet for bare på hele teksten, noe du vil ha for et mønster som etterfølgende mellomrom. s (dotAll, lagt til i ES2018) lar . treffe linjeskift også. u (unicode) behandler teksten som kodepunkter, slik at en emoji teller som ett tegn, og gir tilgang til egenskapsescapes som \p{L} for enhver bokstav i et hvilket som helst skriftsystem. y (sticky) treffer bare nøyaktig på gjeldende posisjon, modusen som tokenizere bruker. JavaScript har også d for treffindekser og v for mengdeoperasjoner i tegnklasser; denne testeren holder seg til de seks over.
Under testteksten viser hvert treff indeksen og gruppene sine. Nummererte grupper kommer fra vanlige parenteser, (?:…) lager grupper uten fanging, og (?<year>\d{4}) lager en navngitt gruppe som vises med navn, slik ISO-dato-eksemplet viser. Menyen Vanlige mønstre setter inn testede utgangspunkter for e-postadresser, URL-er, IPv4-adresser, heksfarger, UUID-er, gjentatte ord og etterfølgende mellomrom. Se på e-postmønsteret som en enkel sjekk, ikke som validering: den fullstendige grammatikken for adresser er langt mer tillatende, og den eneste ekte testen er å sende en melding.
Lookbehind og katastrofal backtracking
Lookarounds tester hva som omgir en posisjon uten å bruke opp tegn. Lookahead, (?=…) og (?!…), har alltid vært en del av JavaScript; lookbehind, (?<=…) og (?<!…), kom i ES2018 og nådde alle store nettlesere da Safari 16.4 støttet det i 2023. Så (?<=\$)\d+ finner 42 i «$42» uten å ta med dollartegnet. I motsetning til mange andre motorer tillater JavaScript lookbehind av vilkårlig lengde.
JavaScript-motoren bruker tilbakesporing: når en sti mislykkes, går den tilbake og prøver alternativene. Nestede kvantifikatorer som (a+)+$ gir den et eksponentielt antall måter å dele opp den samme teksten på, så en streng med 30 a-er etterfulgt av en x kan ta sekunder, og noen få bokstaver til kan ta timer. Dette kalles katastrofal tilbakesporing, og på servere blir det ReDoS, et tjenestenektangrep; én enkelt WAF-regel med denne feilen tok ned Cloudflares nettverk i omtrent en halvtime 2. juli 2019. Siden testeren kjører i fanen din, kan et slikt mønster fryse siden; last siden på nytt og skriv mønsteret om slik at ingen to kvantifikatorer kan gjøre krav på de samme tegnene, med strammere klasser som [^,]* i stedet for .*, eller med ankere. For å redigere selve teksten i stedet for å finne treff i den, se tekstverktøy; flere utviklerverktøy finner du i oversikten utviklerverktøy.
Ofte stilte spørsmål
- Hvorfor finner regex-en min bare ett treff?
- g-flagget er av. Uten det stopper motoren etter det første treffet. Huk av g for å liste alle forekomster; y-flagget alene finner også flere, men bare når de følger rett etter hverandre.
- Matcher \d sifre fra andre skriftsystemer i JavaScript?
- Nei. I JavaScript betyr \d bare 0 til 9 og \w bare ASCII-bokstaver, sifre og understrek, selv med u-flagget. Bruk \p{Nd} eller \p{L} med u for andre skriftsystemer.
- Oppfører et mønster testet her seg likt i Python eller PHP?
- Grunnleggende syntaks går igjen, men detaljene er ulike: i Python skrives navngitte grupper
(?P<name>…), PHP og Python støtter possessive kvantifikatorer som JavaScript mangler, og reglene for lookbehind varierer. Test på nytt i målmotoren. - Hvordan matcher jeg et bokstavelig punktum eller en parentes?
- Escape det med omvendt skråstrek:
\.treffer et punktum og\[en åpnende hakeparentes. Inne i en tegnklasse er de fleste symboler allerede bokstavelige, så[.]treffer også bare et punktum. - Hvorfor frøs siden mens jeg skrev et mønster?
- Mønsteret utløste sannsynligvis katastrofal tilbakesporing på teksten din. Last siden på nytt, unngå nestede kvantifikatorer som
(.*)*eller(a+)+, og la hver del treffe så lite som mulig.