Regex-tester
Typ een patroon, vink de vlaggen aan die u nodig hebt en plak wat tekst: elke match wordt tijdens het typen gemarkeerd en vermeld met de positie en de capture-groepen. Het patroon draait op de eigen JavaScript-regex-engine van uw browser, zodat de resultaten overeenkomen met uw code en de tekst op uw apparaat blijft.
0 tekens · 0 woorden · 0 regels
Treffers worden hier gemarkeerd.0 tekens · 0 woorden · 0 regels
Werkt volledig in dit browsertabblad. Uw tekst wordt nooit geüpload of opgeslagen.
JavaScript-regextokens
De kolom met de eerste treffer is gemaakt door elk patroon op zijn tekst uit te voeren met de JavaScript-engine die deze pagina heeft gebouwd.
| Token | Betekenis | Patroon | Tekst | Eerste treffer |
|---|---|---|---|---|
\d | Cijfer 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Letter, cijfer of underscore (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Witruimte, inclusief tabs en regeleinden | /\s+/ | two spaces | |
. | Elk teken behalve een regeleinde (tenzij s) | /a.c/ | abc a-c | abc |
^ $ | Begin en einde van de invoer (of regel, met m) | /^\w+$/ | single | single |
[abc] | Een van de genoemde tekens | /[aeiou]/ | rhythm and blues | a |
[^abc] | Elk teken dat niet genoemd is | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 of meer, 1 of meer, 0 of 1 | /colou?r/ | color colour | color |
{n,m} | Tussen n en m keer | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Vastleggende groep | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Benoemde vastleggende groep | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Groep zonder vastleggen | /(?:ab)+/ | ababab! | ababab |
a|b | Een van beide kanten | /cat|dog/ | hotdog | dog |
\b | Woordgrens | /\bcat\b/ | concat cat | cat |
(?=…) | Gevolgd door (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Niet voorafgegaan door (negatieve lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Elke Unicode-letter (vereist u) | /\p{L}+/u | naïve 東京 | naïve |
De zes vlaggen en wat ze veranderen
g (global) vindt alle treffers in plaats van te stoppen bij de eerste; zonder deze vlag bevat de lijst één item. i negeert hoofdletters. m (multiline) zorgt ervoor dat ^ en $ overeenkomen met het begin en einde van elke regel in plaats van alleen met die van de hele tekst, wat u nodig hebt voor een patroon als spaties aan het einde van een regel. s (dotAll, toegevoegd in ES2018) laat . ook regeleinden matchen. u (unicode) behandelt tekst als codepunten, zodat een emoji als één teken telt, en schakelt property-escapes in zoals \p{L} voor elke letter in elk schrift. y (sticky) matcht alleen precies op de huidige positie; dit is de modus die tokenizers gebruiken. JavaScript kent ook d voor match-indices en v voor verzamelingsbewerkingen in klassen; deze tester beperkt zich tot de zes hierboven.
Onder de testtekst toont elke treffer de index en de groepen. Genummerde groepen komen van gewone haakjes, (?:…) groepeert zonder vast te leggen, en (?<year>\d{4}) maakt een benoemde groep die onder zijn naam verschijnt, zoals het voorbeeld met de ISO-datum laat zien. Het menu Veelgebruikte patronen voegt geteste startpunten in voor e-mailadressen, URL's, IPv4-adressen, hexkleuren, UUID's, herhaalde woorden en spaties aan het einde. Beschouw het e-mailpatroon als een snelle controle, niet als validatie: de volledige grammatica van adressen is veel ruimer, en de enige echte test is een bericht versturen.
Lookbehind en catastrofale backtracking
Lookarounds testen wat er rond een positie staat zonder dat te verbruiken. Lookahead, (?=…) en (?!…), maakt al altijd deel uit van JavaScript; lookbehind, (?<=…) en (?<!…), kwam met ES2018 en werd in alle grote browsers beschikbaar toen Safari 16.4 het in 2023 uitbracht. Zo vindt (?<=\$)\d+ de 42 in "$42" zonder het dollarteken mee te nemen. In tegenstelling tot veel andere engines staat JavaScript lookbehind van elke lengte toe.
De JavaScript-engine werkt met backtracking: als een pad mislukt, gaat hij terug en probeert hij de alternatieven. Geneste kwantoren zoals (a+)+$ geven hem een exponentieel aantal manieren om dezelfde tekst te verdelen, zodat een reeks van 30 a's gevolgd door een x seconden kan duren en een paar letters meer uren. Dit heet catastrofale backtracking, en op servers wordt het ReDoS, een denial-of-service; één WAF-regel met deze fout legde op 2 juli 2019 het netwerk van Cloudflare ongeveer een half uur plat. Omdat deze tester in uw tabblad draait, kan zo'n patroon de pagina laten vastlopen; laad de pagina opnieuw en herschrijf het patroon zodat geen twee kwantoren dezelfde tekens kunnen opeisen, met strakkere klassen zoals [^,]* in plaats van .*, of met ankers. Voor het bewerken van de tekst zelf in plaats van het matchen ervan, zie de teksttools; meer hulpmiddelen voor ontwikkelaars vindt u in de hub ontwikkelaarstools.
Veelgestelde vragen
- Waarom vindt mijn regex maar één match?
- De g-vlag staat uit. Zonder die vlag stopt de engine na de eerste treffer. Vink g aan om alle voorkomens te tonen; de y-vlag alleen vindt er ook meerdere, maar alleen als ze direct op elkaar volgen.
- Matcht \d in JavaScript ook cijfers uit andere schriften?
- Nee. In JavaScript betekent \d alleen 0 tot 9 en \w alleen ASCII-letters, cijfers en de underscore, ook met de u-vlag. Gebruik \p{Nd} of \p{L} met u voor andere schriften.
- Werkt een hier getest patroon hetzelfde in Python of PHP?
- De basissyntaxis blijft gelijk, maar details verschillen: benoemde groepen schrijft Python als
(?P<name>…), PHP en Python ondersteunen bezitterige kwantoren die JavaScript mist, en de regels voor lookbehind verschillen. Test opnieuw in de doelengine. - Hoe match ik een letterlijke punt of haak?
- Escape het met een backslash:
\.matcht een punt en\[een openingshaakje. In een tekenklasse zijn de meeste symbolen al letterlijk, dus[.]matcht ook alleen een punt. - Waarom liep de pagina vast terwijl ik een patroon typte?
- Het patroon heeft waarschijnlijk catastrofale backtracking veroorzaakt op uw tekst. Laad de pagina opnieuw en vermijd geneste kwantoren zoals
(.*)*of(a+)+, en laat elk onderdeel zo weinig mogelijk matchen.