Regex-tester

Schrijf een reguliere expressie, plak testtekst en zie overeenkomsten live gemarkeerd — met capture groups, vlaggen en duidelijke foutmeldingen.

1.043 weergaven

Hoe het werkt

Een reguliere expressie beschrijft een patroon van tekens in plaats van een letterlijke tekenreeks, waardoor één korte expressie een hele familie van tekst kan matchen: elk e-mailadres, elk telefoonnummer in verschillende notaties, elke regel in een logbestand die begint met "ERROR". Typ een JavaScript-reguliere-expressie, schakel de vlaggen om (g alle overeenkomsten, i hoofdletterongevoelig, m meerregelige ankers, s punt matcht ook regeleinde, u volledige Unicode) en plak voorbeeldtekst: elke overeenkomst wordt ter plekke gemarkeerd en hieronder vermeld met positie en eventuele capture groups. Haakjes () creëren een capture group — een manier om een specifiek stuk van de gematchte tekst eruit te halen, zoals het domein uit een e-mailadres of het jaar uit een datum, in plaats van alleen te weten dat er een overeenkomst was.

Eén onderscheid struikelt bijna iedereen aanvankelijk over: hebzuchtige (greedy) versus luie (lazy) kwantoren. .* is hebzuchtig — het probeert zoveel mogelijk tekst te matchen en gaat pas terug (backtracken) als dat nodig is. Tegen de invoer <b>bold</b> and <i>italic</i> matcht het patroon <.*> hebzuchtig helemaal van de eerste < tot de allerlaatste >, en slikt daarbij beide tags in. Door er een ? aan toe te voegen, .*?, wordt het lui — het matcht zo weinig mogelijk, dus <.*?> stopt bij de eerste > en matcht correct alleen <b>. Dit onderscheid is precies waarom naïeve HTML-matchende regexen breken op echte opmaak.

Wat u moet weten

De engine hier is de eigen, native JavaScript (ECMAScript) regex-implementatie van uw browser, dus een patroon dat hier matcht, matcht identiek in uw JS-code — er zit geen vertaallaag tussen om aan te twijfelen. Regex-varianten van andere talen — PCRE (PHP), Python's re, Java's Pattern — delen het grootste deel van de basissyntax (karakterklassen, kwantoren, groepen) maar wijken af bij geavanceerde functies: ondersteuning van lookbehind, syntax voor benoemde groepen, bezitterige kwantoren en sommige escape-reeksen verschillen. Test randgevallen altijd opnieuw in de daadwerkelijke doeltaal voordat u iets in productie neemt.

Let op catastrofale backtracking: patronen met geneste of overlappende kwantoren, zoals (a+)+b getest tegen een lange reeks "a"-tekens zonder afsluitende "b", kunnen de engine dwingen tot exponentiële backtracking en de pagina — of om dezelfde reden uw productieserver — laten bevriezen. Als een patroon hier vastloopt, verkort dan eerst de testinvoer en herstructureer vervolgens het patroon (vaak door de geneste herhaling volledig te verwijderen) in plaats van er simpelweg meer rekenkracht tegenaan te gooien. Alles draait lokaal in uw browser; er wordt nooit een patroon of tekst verzonden.

Veelgestelde vragen

Welke regex-variant wordt gebruikt?

JavaScript (ECMAScript) — de eigen engine van de browser. Patronen gedragen zich precies zoals in uw JS-code; PCRE en Python delen het grootste deel van de syntax maar verschillen bij enkele geavanceerde constructies.

Wat betekenen de vlaggen?

g vindt alle overeenkomsten in plaats van alleen de eerste; i negeert hoofdlettergebruik; m laat ^ en $ per regel werken; s laat de punt ook regeleinden matchen; u schakelt volledige Unicode-ondersteuning in.

Waarom bevriest mijn patroon de pagina?

Bepaalde patronen met geneste kwantoren (zoals (a+)+b) kunnen bij lange invoer catastrofaal terugkeren (backtracking). Verkort de testtekst of herstructureer het patroon — dezelfde bevriezing zou ook uw productiecode treffen.

Wat is een capture group en waarom is dat belangrijk?

Haakjes rond een deel van een patroon creëren een capture group, die dat specifieke substring apart uit de volledige overeenkomst haalt — bijvoorbeeld (\d{4})-(\d{2})-(\d{2}) gematcht tegen een datum levert het jaar, de maand en de dag als drie afzonderlijke captures op, in plaats van alleen te bevestigen dat de hele tekenreeks eruitzag als een datum. Niet-vastleggende groepen, geschreven als (?:...), groeperen voor structuur zonder een extra capture te produceren.

Waarom matchte mijn patroon meer (of minder) tekst dan verwacht?

Bijna altijd een greedy-versus-lazy-mismatch. .* en soortgelijke kwantoren pakken standaard zoveel mogelijk; voeg een ? toe (.*?, +?) om ze lui te maken, zodat ze stoppen bij het eerst mogelijke punt in plaats van het laatste. Dit ene teken is meestal de oplossing wanneer een regex over meerdere regels of tags heen te veel matcht.

Reacties

Nog geen reacties — schrijf de eerste!

Vergelijkbare tools