Regex Tester

Test reguliere expressies op een tekenreeks en markeer alle overeenkomsten

Probeer een voorbeeld

Patroon

//g

Testreeks

Draait lokaal · Veilig om secrets te plakken

Wat is een reguliere expressie?

Een reguliere expressie (regex of regexp) is een reeks tekens die een zoekpatroon definieert. Met een regex tester schrijf je een patroon, pas je het toe op voorbeeldtekst en zie je alle overeenkomsten direct gemarkeerd. Het concept gaat terug op het werk van wiskundige Stephen Kleene over reguliere talen in de jaren vijftig. Ken Thompson bouwde in 1968 de eerste regex-engine in de QED-teksteditor.

Een regex-engine leest een patroon van links naar rechts en verbruikt invoertekens terwijl hij probeert te matchen. Bij een gedeeltelijke mismatch gebruikt hij backtracking: de engine stapt terug en probeert alternatieve paden door het patroon. Sommige engines (zoals RE2 in Go) vermijden backtracking volledig door patronen om te zetten naar deterministische eindige automaten (DFA), wat lineaire matching garandeert ten koste van functies zoals back-references.

Regex-syntaxis is losjes gestandaardiseerd. PCRE (Perl Compatible Regular Expressions) is de meestgebruikte variant, ondersteund door PHP, de Python re-module en JavaScript met kleine verschillen. POSIX definieert een beperkter syntax die door grep en sed wordt gebruikt. Deze verschillen zijn van belang bij het overzetten van patronen tussen talen: een lookahead die werkt in JavaScript compileert mogelijk helemaal niet in Go's RE2-engine.

Waarom een online regex tester gebruiken?

Regex debuggen in een codebestand betekent steeds opslaan, uitvoeren en de uitvoer inspecteren. Een browsergebaseerde regex tester sluit die feedbacklus tot nul: je typt en je ziet de overeenkomsten direct.

Overeenkomsten direct gemarkeerd
Elke toetsaanslag werkt de resultaten meteen bij. Je ziet welke tekstdelen overeenkomen, welke opvanggroepen zijn gevuld en waar elke match begint en eindigt. Geen compileer-uitvoer-debugcyclus.
🔒
Verwerking zonder privacyrisico
Patroonherkenning verloopt volledig in je browser via de JavaScript RegExp-engine. Er worden geen teksten of patronen naar een server verstuurd. Dat is van belang bij testen met logbestanden, klantgegevens of API-responses met gevoelige informatie.
🔍
Visuele inspectie van overeenkomsten
Overeenkomsten worden inline gemarkeerd met hun posities en de waarden van opvanggroepen. Visuele weergave maakt het eenvoudiger om off-by-one-fouten in kwantoren of ontbrekende ankers te ontdekken.
🌐
Geen account of installatie nodig
Werkt op elk apparaat met een moderne browser. Geen account, geen extensie, geen IDE-plugin. Open de pagina, plak je patroon en tekst, en begin met testen.

Toepassingen van de Regex Tester

Invoervalidatie aan de frontend
Bouw en verifieer patronen voor e-mail-, telefoonnummer- of creditcardvelden voordat je ze inbedt in HTML5-patroonattributen of JavaScript-validatielogica.
Logverwerking aan de backend
Schrijf regex-patronen die tijdstempels, foutcodes of IP-adressen uit applicatielogs extraheren. Test ze op echte logvoorbeelden om te bevestigen dat het patroon de juiste groepen vastlegt.
DevOps en infrastructuur
Debug regex in Nginx-locatieblokken, Apache-herschrijfregels of Prometheus-alarmeringsregels. Een fout patroon in een serverconfiguratie kan routering breken of meldingen volledig missen.
QA en testautomatisering
Valideer dat antwoordteksten of HTML-uitvoer overeenkomen met verwachte patronen in end-to-end-testbeweringen. Test de regex hier eerst voordat je hem opneemt in je testset.
Data-extractiepipelines
Ontwikkel patronen voor het extraheren van gestructureerde velden uit ongestructureerde tekst: productprijzen scrapen, randgevallen in CSV verwerken of metadata uit e-mailheaders halen.
Reguliere expressies leren
Experimenteer met metatekens, kwantoren en groepen op voorbeeldtekst. Directe visuele terugkoppeling maakt regex-syntax makkelijker te leren dan documentatie alleen.

Beknopte regex-syntaxreferentie

De onderstaande tabel behandelt de meestgebruikte regex-tokens. Deze werken in JavaScript, Python, Go, PHP en de meeste PCRE-compatibele engines. Taalspecifieke uitbreidingen (zoals Pythons conditionele patronen of JavaScript's named groups met \k-syntaxis) worden vermeld in de sectie met codevoorbeelden.

PatroonNaamBeschrijving
.Any characterMatches any single character except newline (unless s flag is set)
\dDigitMatches [0-9]
\wWord characterMatches [a-zA-Z0-9_]
\sWhitespaceMatches space, tab, newline, carriage return, form feed
\bWord boundaryMatches the position between a word character and a non-word character
^Start of string/lineMatches the start of the input; with m flag, matches start of each line
$End of string/lineMatches the end of the input; with m flag, matches end of each line
*Zero or moreMatches the preceding token 0 or more times (greedy)
+One or moreMatches the preceding token 1 or more times (greedy)
?OptionalMatches the preceding token 0 or 1 time
{n,m}Quantifier rangeMatches the preceding token between n and m times
()Capturing groupGroups tokens and captures the matched text for back-references
(?:)Non-capturing groupGroups tokens without capturing the matched text
(?=)Positive lookaheadMatches a position followed by the given pattern, without consuming it
(?<=)Positive lookbehindMatches a position preceded by the given pattern, without consuming it
[abc]Character classMatches any one of the characters inside the brackets
[^abc]Negated classMatches any character not inside the brackets
|AlternationMatches the expression before or after the pipe

Regex-vlaggen uitgelegd

Vlaggen (ook wel modifiers genoemd) bepalen hoe de engine het patroon verwerkt. In JavaScript voeg je ze toe na de sluitende slash: /patroon/gi. In Python geef je ze mee als tweede argument: re.findall(patroon, tekst, re.IGNORECASE | re.MULTILINE). Niet alle vlaggen zijn in elke taal beschikbaar.

VlagNaamGedrag
gGlobalFind all matches, not just the first one
iCase-insensitiveLetters match both uppercase and lowercase
mMultiline^ and $ match start/end of each line, not just the whole string
sDot-all. matches newline characters as well
uUnicodeTreat the pattern and subject as a Unicode string; enables \u{FFFF} syntax
yStickyMatches only from the lastIndex position in the target string

Codevoorbeelden

Werkende regex-voorbeelden in JavaScript, Python, Go en de commandoregel. Elk voorbeeld toont patroonopbouw, extractie van overeenkomsten en uitvoer.

JavaScript
// Match all email addresses in a string
const text = 'Contact us at support@example.com or sales@example.com'
const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g

const matches = text.matchAll(emailRegex)
for (const match of matches) {
  console.log(match[0], 'at index', match.index)
}
// → "support@example.com" at index 14
// → "sales@example.com" at index 37

// Named capture groups (ES2018+)
const dateRegex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/
const result = '2026-03-30'.match(dateRegex)
console.log(result.groups)
// → { year: "2026", month: "03", day: "30" }

// Replace with a callback
'hello world'.replace(/\b\w/g, c => c.toUpperCase())
// → "Hello World"
Python
import re

# Find all IPv4 addresses
text = 'Server 192.168.1.1 responded, fallback to 10.0.0.255'
pattern = r'\b(?:\d{1,3}\.){3}\d{1,3}\b'

matches = re.findall(pattern, text)
print(matches)  # → ['192.168.1.1', '10.0.0.255']

# Named groups and match objects
date_pattern = r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
m = re.search(date_pattern, 'Released on 2026-03-30')
if m:
    print(m.group('year'))   # → '2026'
    print(m.group('month'))  # → '03'

# Compile for repeated use (faster in loops)
compiled = re.compile(r'\b[A-Z][a-z]+\b')
words = compiled.findall('Hello World Foo bar')
print(words)  # → ['Hello', 'World', 'Foo']
Go
package main

import (
	"fmt"
	"regexp"
)

func main() {
	// Find all matches
	re := regexp.MustCompile(`\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b`)
	text := "Contact support@example.com or sales@example.com"
	matches := re.FindAllString(text, -1)
	fmt.Println(matches)
	// → [support@example.com sales@example.com]

	// Named capture groups
	dateRe := regexp.MustCompile(`(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})`)
	match := dateRe.FindStringSubmatch("2026-03-30")
	for i, name := range dateRe.SubexpNames() {
		if name != "" {
			fmt.Printf("%s: %s\n", name, match[i])
		}
	}
	// → year: 2026
	// → month: 03
	// → day: 30

	// Replace with a function
	result := re.ReplaceAllStringFunc(text, func(s string) string {
		return "[REDACTED]"
	})
	fmt.Println(result)
	// → Contact [REDACTED] or [REDACTED]
}
CLI (grep / sed)
# Find lines matching an IP address pattern
grep -E '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' access.log

# Extract email addresses from a file
grep -oE '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' contacts.txt

# Replace dates from YYYY-MM-DD to DD/MM/YYYY using sed
echo "2026-03-30" | sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/'
# → 30/03/2026

# Count matches per file in a directory
grep -rcE 'TODO|FIXME|HACK' src/
# → src/main.js:3
# → src/utils.js:1

Veelgestelde vragen

Wat is het verschil tussen regex en globpatronen?
Globpatronen (zoals *.txt of src/**/*.js) zijn een vereenvoudigde jokertekensyntaxis voor bestandspadherkenning in shells en buildhulpmiddelen. Ze ondersteunen * (willekeurige tekens), ? (één teken) en [] (tekenklassen), maar missen kwantoren, groepen, lookaheads en alternatie. Regex is veel expressiever en werkt op willekeurige tekst, niet alleen bestandspaden. Een globpatroon *.json is ruwweg gelijk aan de regex ^.*\.json$.
Hoe match ik een letterlijke punt of haakje in regex?
Zet een backslash voor het teken: \. matcht een letterlijke punt, \[ matcht een letterlijk haakje. Binnen een tekenklasse [] is een punt al letterlijk en hoeft niet te worden ge-escaped. Een veelgemaakte fout is 192.168.1.1 schrijven zonder de punten te escapen, waardoor ook 192x168y1z1 matcht omdat . 'willekeurig teken' betekent.
Worden mijn testgegevens naar een server gestuurd?
Nee. Dit hulpmiddel voert regex-matching volledig uit in je browser via de JavaScript RegExp-engine. Er worden geen netwerkverzoeken gedaan met je tekst of patroon. Je kunt dit bevestigen door het tabblad Netwerk in de DevTools van je browser te openen tijdens gebruik.
Waarom werkt mijn regex in JavaScript maar niet in Python?
JavaScript en Python gebruiken verschillende regex-engines met licht afwijkende functiesets. JavaScript ondersteunt \d, lookaheads (?=) en lookbehinds (?<=) sinds ES2018, maar niet conditionele patronen, atomaire groepen of possessieve kwantoren. De Python re-module ondersteunt geen \p{}-Unicode-eigenschapsklassen (gebruik hiervoor de externe regex-module). Test altijd in de engine van de doeltaal of raadpleeg de regex-documentatie van die taal.
Wat veroorzaakt catastrofale backtracking in regex?
Catastrofale backtracking ontstaat wanneer een patroon geneste kwantoren heeft die een exponentieel aantal matchpaden creëren. Het klassieke voorbeeld is (a+)+ toegepast op een reeks a's gevolgd door een niet-matchend teken. De engine probeert elke mogelijke verdeling van de a's tussen de binnenste en buitenste groep voordat hij mislukt. Los dit op door atomaire groepen (?>), possessieve kwantoren a++ te gebruiken, of herschrijf het patroon om dubbelzinnige herhaling te vermijden.
Kan ik regex gebruiken om HTML te verwerken?
Regex kan eenvoudige waarden uit HTML-fragmenten extraheren, zoals het ophalen van de href uit een enkel <a>-element. Voor volledige HTML-verwerking gebruik je een echte parser (DOMParser in JavaScript, BeautifulSoup in Python of html/template in Go). HTML is een contextvrije grammatica; regex verwerkt reguliere grammatica's. Geneste tags, optionele attributen en zelfsluitende elementen creëren patronen die regex niet betrouwbaar kan matchen.
Wat is het verschil tussen greedy en lazy kwantoren?
Een greedy kwantor (* of +) matcht zo veel mogelijk tekens en past dan terug als de rest van het patroon mislukt. Een lazy kwantor (*? of +?) matcht zo weinig mogelijk tekens en breidt alleen uit wanneer nodig. Voor de invoer <b>één</b><b>twee</b> matcht het greedy patroon <b>.*</b> de hele reeks van de eerste <b> tot de laatste </b>, terwijl het lazy patroon <b>.*?</b> <b>één</b> en <b>twee</b> afzonderlijk matcht.