Regex-spiekbriefje
Reguliere expressies zijn compact genoeg dat de syntaxis makkelijker op te zoeken dan te onthouden is. Deze pagina is het geheel ervan op één scherm — klassen, kwantoren, ankers, groepen, lookaround, escapen en de vlaggen — met een werkend voorbeeld voor elke regel.
De smaak is JavaScript, wat in je browser draait en wat de regextester op deze site gebruikt. Het meeste is identiek in Python, Java, Go en PCRE; waar smaken uiteenlopen, doen ze dat aan de randen — lookbehind-ondersteuning, syntaxis voor benoemde groepen, en of \d 'ASCII-cijfer' of 'elk Unicode-cijfer' betekent.
Twee dingen zijn verantwoordelijk voor de meeste verrassingen. Kwantoren zijn gulzig: ze pakken alles wat ze kunnen en geven pas terug wanneer de rest van het patroon mislukt, en daarom slikt <.+> twee tags op en <.+?> niet. En alternatie bindt het losst van allemaal, dus ^a|b$ betekent 'begint met a, of eindigt op b' — niet wat de meeste mensen bedoelen wanneer ze het schrijven.
Tekenklassen
11De afkortingen zijn ASCII-only tenzij je de u-vlag toevoegt en Unicode-eigenschap-escapes gebruikt.
| Syntaxis | Betekenis | Voorbeeld |
|---|---|---|
| . | Elk teken behalve een regeleindeVoeg de s-vlag toe om het ook regeleindes te laten matchen. | /a.c/"abc" → "abc" |
| \d | Een cijfer, 0–9 | /\d+/"order 42" → "42" |
| \D | Alles wat geen cijfer is | /\D+/"42abc" → "abc" |
| \w | Letter, cijfer of underscoreAlleen ASCII — "é" is geen \w. | /\w+/"user_1!" → "user_1" |
| \W | Alles wat \w niet matcht | /\W+/"a++b" → "++" |
| \s | Elke witruimte, inclusief tabs en regeleindes | /\s+/"a \t b" → " \t " |
| \S | Elk niet-witruimteteken | /\S+/" hi" → "hi" |
| [abc] | Een van de opgesomde tekens | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Elk teken behalve de opgesomde | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Een bereik van tekens | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Elke Unicode-letter (vereist de u-vlag) | /\p{L}+/"42 café" → "café" |
Kwantoren
7Al deze zijn standaard gulzig: ze pakken zoveel als ze kunnen en geven pas terug als de rest van het patroon mislukt.
| Syntaxis | Betekenis | Voorbeeld |
|---|---|---|
| * | Nul of meer | /ab*/"a" → "a" |
| + | Een of meer | /ab+/"abbb" → "abbb" |
| ? | Nul of een — maakt het optioneel | /colou?r/"color" → "color" |
| {3} | Precies drie | /\d{3}/"id 12345" → "123" |
| {2,} | Twee of meer | /a{2,}/"aaa" → "aaa" |
| {2,4} | Tussen twee en vier | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Lui — pakt zo min mogelijkDe gulzige <.+> zou beide tags opslokken. | /<.+?>/"<a><b>" → "<a>" |
Ankers en grenzen
4Deze matchen een positie, geen teken, dus ze verbruiken niets.
| Syntaxis | Betekenis | Voorbeeld |
|---|---|---|
| ^ | Begin van de string, of van een regel met de m-vlag | /^a/"abc" → "a" |
| $ | Einde van de string, of van een regel met de m-vlag | /c$/"abc" → "c" |
| \b | Een woordgrensDit is wat voorkomt dat "cat" matcht binnen "concatenate". | /\bcat\b/"the cat sat" → "cat" |
| \B | Geen woordgrens | /\Bcat/"concatenate" → "cat" |
Groepen en alternatie
5| Syntaxis | Betekenis | Voorbeeld |
|---|---|---|
| (abc) | Vangende groep — onthouden voor vervanging | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Groeperen zonder vangenGebruik dit wanneer je alleen de groepering nodig hebt; het houdt vangstnummers betekenisvol. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Benoemde vangende groep | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Beide kanten — alternatieAlternatie heeft de laagste prioriteit: ^a|b$ is "^a" of "b$", niet "^(a|b)$". | /cat|dog/"one dog" → "dog" |
| \1 | Terugverwijzing naar de eerste groep | /(\w)\1/"letter" → "tt" |
Lookaround
4Beweringen over wat een positie omringt. Ze matchen zelf niets, en dat maakt ze veilig te combineren.
| Syntaxis | Betekenis | Voorbeeld |
|---|---|---|
| (?=…) | Lookahead — gevolgd door dit | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Negatieve lookahead — niet gevolgd door dit | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — voorafgegaan door dit | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Negatieve lookbehind — niet voorafgegaan door dit | /(?<!\$)\b\d+/"about 40" → "40" |
Escapen
5Deze twaalf tekens zijn de tekens die een backslash nodig hebben om letterlijk te worden genomen.
| Syntaxis | Betekenis | Voorbeeld |
|---|---|---|
| \. | Een letterlijke punt | /\d\.\d/"v2.5" → "2.5" |
| \\ | Een letterlijke backslash | /\\/"C:\\dir" → "\\" |
| \n | Een regelinvoer | /a\nb/"a\nb" → "a\nb" |
| \t | Een tab | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Een teken via zijn codepunt | /\u00e9/"café" → "é" |
Vlaggen
6| Vlag | Naam | Betekenis |
|---|---|---|
| g | Globaal | Vind elke match, niet alleen de eerste. |
| i | Hoofdletters negeren | Matcht ongeacht hoofd- of kleine letters. |
| m | Meerregelig | Laat ^ en $ matchen bij elk regeleinde in plaats van alleen aan de uiteinden van de string. |
| s | Dot all | Laat . ook regeleindes matchen. |
| u | Unicode | Behandelt het patroon als codepunten en schakelt \p{…} eigenschap-escapes in. |
| y | Sticky | Matcht alleen precies bij lastIndex, zoekt nooit vooruit. |