Regex tester
Voer een patroon in, kies de flags en plak je testtekst: de regex tester toont elke match met zijn index, de inhoud van genummerde en benoemde capture groups en legt elk onderdeel van het patroon in het Nederlands uit. Er wordt gematcht met de JavaScript-engine (ECMAScript) van je browser.
Zo wordt het berekend
Deze regex tester gebruikt de JavaScript-variant van reguliere expressies zoals gedefinieerd door de ECMA-262-standaard en geïmplementeerd door je browser. Een patroon dat hier werkt, werkt precies zo in String.prototype.match, matchAll, replace en RegExp.prototype.test – in Chrome, Firefox, Safari en Node.js.
Het resultaat lezen
- Matches: elke match met zijn index (tekenpositie vanaf nul, geteld in UTF-16-code-units zoals JavaScript dat doet – een emoji telt als 2) en lengte. Regeleindes worden getoond als ↵, tabs als ⇥.
- Groepen per match: wat elk haakjespaar heeft vastgelegd – genummerde groepen
( )en benoemde groepen(?<naam> ). “Niet meegedaan” betekent dat de groep in een niet-gekozen alternatief zit. Met ded-flag krijg je ook de positie van elke groep. - Patroon uitgelegd: elk token in gewoon Nederlands; ingesprongen regels (›) zitten binnen een groep.
De flags
g vindt alle matches in plaats van alleen de eerste, i negeert hoofdlettergebruik, m zorgt dat ^ en $ per regel gelden, s laat de punt ook regeleindes matchen. u behandelt emoji en andere tekens buiten het Basic Multilingual Plane als één teken en schakelt Unicode-eigenschappen in zoals \p{L} (elke letter, ook é of ñ). v is de nieuwere versie van u met verzamelingsbewerkingen zoals [\p{L}--[a-z]]; u en v zijn niet te combineren. y (“sticky”) vindt alleen matches die direct op elkaar aansluiten.
Bescherming tegen oneindige loops en vastlopers
Patronen zoals a* of \b kunnen lege matches opleveren. Net als JavaScript zelf gaat de tester dan één teken verder (een volledig code point bij u/v), zodat er geen oneindige lus ontstaat. Er worden maximaal 1.000 matches gezocht.
Het grotere gevaar is catastrofale backtracking (ReDoS): geneste kwantoren zoals (a+)+$ proberen een exponentieel aantal combinaties op een string die niet matcht – 30 tekens kunnen de engine minutenlang bezighouden. Daarom draait de zoekopdracht in een aparte achtergrondthread en wordt hij na 2 seconden gestopt; de pagina blijft reageren. Vermijd zulke patronen ook in je eigen code, zeker bij gebruikersinvoer.
Verschillen met andere regex-varianten
PCRE (PHP), Python, Java en .NET verschillen in details: JavaScript kent geen possessive kwantoren (a++), geen atomic groups en geen \A- of \Z-ankers; \w dekt alleen A–Z, a–z, 0–9 en het liggende streepje – gebruik voor letters met accenten \p{L} met de u-flag.
Je testtekst wordt niet verzonden, niet opgeslagen en niet in de link opgenomen – alleen het patroon en de flags.
Veelgestelde vragen
Hoe test ik een reguliere expressie?
Typ het patroon zonder schuine strepen in het bovenste veld, vink de gewenste flags aan en plak je tekst. Alle matches worden direct gemarkeerd in de tekst en met hun index vermeld; daaronder zie je wat elke groep heeft vastgelegd.
Waarom matcht \w geen letters met accenten?
In JavaScript staat \w alleen voor A–Z, a–z, 0–9 en _. Gebruik voor letters in elke taal \p{L} met de u-flag, bv. [\p{L}\d_]+ voor een woord als “café”.
Wat is het verschil tussen greedy en lazy?
Greedy kwantoren (*, +, {2,}) pakken zoveel mogelijk tekst, lazy kwantoren met een vraagteken erachter (*?, +?) zo weinig mogelijk. Op “<b>x</b>” matcht <.+> de hele string, <.+?> alleen “<b>”.
Hoe geef ik een capture group een naam?
Gebruik (?<naam>…). In code lees je dit uit met match.groups.naam, in een vervangingsstring met $<naam>, en binnen het patroon met de backreference \k<naam>.
Waarom werd mijn zoekopdracht gestopt?
Die duurde langer dan 2 seconden – meestal door catastrofale backtracking met geneste kwantoren zoals (\w+)*. Vereenvoudig het patroon: geen geneste kwantoren, maak alternatieven ondubbelzinnig en anker met ^ en $.
Geldt het resultaat ook voor PHP of Python?
Voor eenvoudige patronen meestal wel, maar het is alleen gegarandeerd voor JavaScript. PHP (PCRE) en Python ondersteunen extra syntax zoals possessive kwantoren of \A, en Python schrijft benoemde groepen traditioneel als (?P<naam>…).
Bronnen en wettelijke basis
- ECMA-262 § 22.2: ECMA-262 – ECMAScript Language Specification, RegExp (Regular Expression) Objects
- MDN Web Docs – Regular expressions (Guide)
- MDN Web Docs – RegExp.prototype.flags
- MDN Web Docs – String.prototype.matchAll() (empty matches, lastIndex)
- OWASP – Regular expression Denial of Service (ReDoS)
Bijgewerkt op:
Vergelijkbare tools
- JSON formatteren, valideren en minifiërenValideer je JSON volgens RFC 8259: foutmelding met exacte regel, kolom en duidelijke uitleg. Opmaken, minifiëren en sleutels sorteren, lokaal in de browser.
- XML- en CSV-validator onlineControleer of XML welgevormd is en valideer CSV volgens RFC 4180: fouten met regel en kolom, gedetecteerd scheidingsteken, tabelvoorbeeld. Draait lokaal.
- Base64 encoderen en decoderenBase64 en Base64url encoderen en decoderen met correcte UTF-8, plus URL encode/decode (percent-encoding). Duidelijke foutmeldingen, lokaal in je browser.
- Hash generator: SHA-256, SHA-512, SHA-1, MD5Bereken SHA-256-, SHA-384-, SHA-512-, SHA-1- en MD5-hashes van tekst of een bestand en controleer een checksum – lokaal in je browser, geen upload, gratis.
- Syntax van een e-mailadres controlerenControleer een of meer e-mailadressen volgens RFC 5321/5322: lengtes, domeinlabels, internationale domeinen (Punycode). Lokaal, niets wordt verstuurd.
- Beeldverhouding berekenenBereken de beeldverhouding uit breedte en hoogte (1920 × 1080 = 16:9), vind de ontbrekende zijde, de decimale waarde, de standaardverhouding en de CSS.