Command Palette

Search for a command to run...

Regex-tester: debug-regulerende expressies tegen echte tekst

Regex-tester: debug-regulerende expressies tegen echte tekst

T
Toolz Team
|Jul 14, 2026|17 min lezen

Onderdeel van de collectie prostituée

Ik verloor het grootste deel van een middag één keer aan een enkele hebzuchtige kwantificator Ik was een omleidingskaart aan het schrijven voor een WordPress-migratie - een paar honderd oude URL's die herschreven moesten worden naar nieuwe naaktslakken - en ik had een regex die dat was vermeend om de sleepslug vanaf elk pad te vangen. Het werkte op de drie URL's die ik in mijn hoofd heb getest. Het werkte niet op de vierde, die twee padsegmenten had, omdat .* Had vrolijk de eerste slash ingeslikt en alles daarna. De regel leidde stilletjes de helft van de site naar de verkeerde plaats, en ik kwam erachter van een lezer, niet van mijn tests, omdat mijn "test" naar het patroon staarde en het vertrouwde.

Dat is het kernprobleem met reguliere uitdrukkingen: ze zijn alleen schrijven totdat je ze ergens tegenaan zet. Een patroon dat tot op het moment dat echte invoer als aannemelijk leest, aantoonbaar bewijst, bewijst dat het verkeerd is en de faalwijzen zijn stil. Een regex die overeenkomt met niets, geeft geen fout. Een regex die te veel overeenkomt, gooit geen fout. Een regex met een subtiel verkeerde vastleggroep geeft je de verkeerde subtekenreeks en gaat verder. De enige manier om een patroon te kennen, doet wat je denkt, door het de rommelige, met randcases beladen tekst te voeden die het daadwerkelijk zal zien en gelaatsuit op wat het grijpt.

a regex-tester sluit dat gat Je zet je patroon in het ene vakje, je voorbeeldtekst in een ander vakje, en elke wedstrijd licht op zijn plaats - waarbij de capture-groepen zijn uitgebroken zodat je precies kunt zien welk stukje van de string in groep 1 is geland versus groep 2. degene die ik voor Toolz.dev heb gebouwd, draait op de browser's native RegExp Engine, dezelfde die uw JavaScript- en TypeScript-code gebruiken, dus wat u in de tester ziet, is wat u in productie krijgt. Geen benadering, geen "dicht genoeg."

Deze gids behandelt hoe de tester kan worden gebruikt om patronen snel te debuggen, wat elke vlag eigenlijk doet, hoe capture-groepen en benoemde groepen in de uitvoer verschijnen, en de javascript-specifieke gotchas die mensen uit Python of PCRE laten komen.

tl;dr: Plak je patroon in de Toolz.dev regex-tester (geen schuine slagen nodig), schakel de G/I/M/S/U/Y-vlaggen in en laat uw testtekst hieronder vallen. Overeenkomsten markeren live met afwisselende kleuren, elke genummerde en benoemde capture-groep wordt per wedstrijd vermeld en syntaxisfouten tonen het exacte bericht van de engine. Het maakt gebruik van de echte JavaScript Regexp-engine, draait 100% client-side, dus gevoelige logboeken uploaden nooit en worden gekoppeld aan de Regex-bouwer Voor het samenstellen van patronen vanaf nul.


Hoe test je een regex zonder je hele programma uit te voeren?

De langzame manier om een regex te debuggen is de lus waarmee de meesten van ons beginnen: bewerk het patroon in uw code, voer het programma uit, lees de uitvoer, raad wat er mis is gegaan, herhaal Elke iteratie kost een volledige programma-run, en de feedback is indirect - je ziet de gewicht van de wedstrijd, niet de wedstrijd zelf.

Een tester stort die lus in tot niets. Je plakt het patroon, plakt representatieve tekst en ziet de overeenkomsten onmiddellijk. Wanneer u één teken in het patroon wijzigt, worden de hoogtepunten bijgewerkt. Dit verstevigt de feedback tot het punt waar je kunt navorsen- probeer een + waar je een had *, voeg een woordgrens toe, maak een groep niet-vastleggend - en zie hoe het effect in realtime landt in plaats van het zich voor te stellen.

De belangrijkste discipline is het gebruik van daadwerkelijk testtekst, niet het schone voorbeeld in je hoofd De URL die mijn omleidingskaart brak had twee padsegmenten; mijn mentale testcase had er een Als ik de eigenlijke lijst met oude URL's in een tester had geplakt, zou de hebzuchtige match zichtbaar verkeerd zijn geweest op regel vier Pak de daadwerkelijke logregels, de daadwerkelijke gebruikersinvoer, de daadwerkelijke bestandspaden - inclusief de lelijke - en laat de tester u laten zien waar het patroon uit elkaar valt voordat uw gebruikers dat doen.

Wat veranderen de Regex-vlaggen eigenlijk?

Vlaggen wijzigen hoe het hele patroon wordt toegepast, en het verkeerd begrijpen ervan zit achter een groot deel van "Waarom dit niet werkt" momenten. de klavier Stelt alle zes JavaScript-vlaggen bloot als schakelt, zodat u er een kunt omdraaien en het resultaat kunt zien verschuiven.

g - globaal. Zonder dat stopt het matchen bij de eerste treffer. Hiermee vindt de engine elke overeenkomst in de tekst. In de tester staat Global standaard aan omdat je bijna altijd alle overeenkomsten wilt zien; schakel het uit om te bevestigen hoe een oproep voor één wedstrijd leuk is String.match buiten g zou terugkeren.

ik - negeer zaak. maakt het hele patroon niet-gevoelig, dus error wedstrijd Error en ERROR. rechttoe rechtaan, en de meest gebruikte vlag na G.

m - multiline. Deze wordt op grote schaal verkeerd begrepen. het doet nee stroomsluiting . Kruislijn breekt. Het verandert wat ^ en $ Anker aan: met m, ze komen overeen aan het begin en einde van elk regel, niet alleen het begin en het einde van de hele string. Als je regel voor regel in een logboek bijeenkomt, wil je dit.

s - dotAll. Dit is de vlag die maakt . overeenkomen met nieuwe regeltekens. zonder, . Komt overeen met elk personage tegenwerping maken Een regeleinde, daarom stopt een patroon dat bedoeld is om meerdere lijnen te overspannen, vaak stilletjes bij de eerste. Als uw wedstrijd de grenzen van de lijn moet overschrijden, s is wat je nodig hebt - niet m.

u - unicode. Schakelt volledige Unicode-modus in, waardoor \u{...} Ontsnapt aan het werk, behandelt surrogaatparen als enkele codepunten en maakt karakterklassen zoals \p{Letter} Beschikbaar. Belangrijk wanneer uw tekst emoji of niet-Latijnse scripts heeft.

y - plakkerig. verankert elke wedstrijdpoging met de exacte positie van lastIndex, dus matching slaagt alleen als het daar precies begint. Het is een nichevlag die wordt gebruikt in tokenizers en parsers; het meeste dagelijkse werk raakt het nooit aan.

De verwarring die de meeste tijd kost is m tegen s. Mensen reiken naar multiline als ze dotall bedoelen. Als je punt niet overschrijdt, heb je nodig s. Als je ankers geen lijngrenzen raken, moet je m. Ze lossen verschillende problemen op en worden vaak samen gebruikt.

Hoe worden capture-groepen weergegeven in de uitvoer?

haakjes in een patroon doen twee taken: ze groeperen subpatronen voor kwantoren of afwisseling, en ze buitmaken het aangepaste segment voor extractie Wanneer u ' een regex gebruikt om gegevens uit tekst te halen - een datum' s jaar en maand, een logregel ' s tijdstempel en niveau - de vastleggroepen zijn het hele punt, en als u ze verkeerd hebt, is dit de meest voorkomende bron van & quot; het patroon komt overeen, maar ik heb de verkeerde tekenreeks."

de klavier Geeft elke wedstrijd een lijst met zijn capture-groepen eronder uitgebroken. Groep 1 is het eerste haakje haakjes, groep 2 de tweede, enzovoort, elk weergegeven met de exacte tekst die het voor die overeenkomst heeft vastgelegd. Dit maakt groepsgrensbugs duidelijk: als groep 1 meer pakt dan je had verwacht, kun je het zien en de haakjes naar binnen trekken.

Genoemde groepen krijgen dezelfde behandeling. Wanneer je schrijft (?<year>\d{4})-(?<month>\d{2}), de tester toont de vangsten bij naam - <year> en <month>- naast hun genummerde equivalenten, zodat u de namenkaart kunt bevestigen aan de segmenten die u bedoelt voordat u erop vertrouwt match.groups.year in code. Genoemde groepen maken patronen zelfdocumentatie en code beter leesbaar, en het correct zien van ze in de tester is de snelste manier om ze te vertrouwen.

Een verwante val De tester oppervlakken: een groep die deelneemt aan het patroon maar niet overeenkwam met een bepaalde poging, toont als "geen match" in plaats van een lege string. Dat onderscheid is van belang, omdat in JavaScript zo'n groep is undefined, en code die ervan uitgaat dat het altijd een string zal gooien. Als u het ziet gemarkeerd in de tester, vertelt u dat u die toegang moet bewaken.

Welke regex-smaak is dit, en waarom maakt het uit?

Reguliere expressies zijn niet één taal. Het patroon dat werkt in Python&#39;s re module kan zich anders gedragen - of gooien - in JavaScript, en vice versa Dit klavier gebruikt het JavaScript (ECMAScript) engine ingebouwd in uw browser, die byte-voor-byte dezelfde engine Node.js draait Dus als u & #39; bezig met het schrijven van JavaScript, TypeScript, of Node code, de resultaten hier zijn precies wat uw code zal doen.

Dat precisie snijdt aan twee kanten. Als u een patroon kopieert van een stapeloverloopantwoord geschreven voor PCRE (PHP en de preg_ functies die ik constant gebruik in WordPress werk) of voor Python, sommige functies won&#39; t vertalen JavaScript historisch gezien ontbrak lookbehind beweringen, kreeg ze relatief recent, en nog steeds verwerkt sommige Unicode eigenschap escapes anders Bezittelijke kwantoren en atomaire groepen van PCRE don&#39; t bestaan in JavaScript helemaal niet Recursion - een PCRE-functie voor het matchen van geneste structuren - heeft geen JavaScript equivalent.

Het praktische plaatje: test in de smaak die je inzet. Een tester die getrouw één engine implementeert, is nuttiger dan een die een fuzzy gemiddelde van allemaal implementeert, omdat "het werkte in de tester" moet betekenen "het zal werken in mijn code." Voor PHP en WordPress werk houd ik de verschillen in gedachten en verifieer ik de server-side apart; voor alles wat JavaScript, deze tester is de bron van waarheid. De bredere toolkit voor dit soort taalbewuste verificatie wordt behandeld in de Handleiding voor coderingshulpmiddelen.

Wat zijn de dagelijkse toepassingen voor een regex-tester?

Validatiepatronen bouwen en debuggen

E-mailvelden, telefoonnummers, postcodes, naaktslakken, semantische versiereeksen - elk formulier valideert iets, en de validatie is meestal een regex. Met de tester kun je de lastige hoesjes naar je patroon gooien voordat het wordt verzonden: de e-mail met een plus-adressing-tag, het telefoonnummer met een extensie, de versiereeks zoals 1.10.0 dat een naïef patroon afkapt. Plak een kolom met echte waarden en kijk welke niet overeenkomen.

Gegevens uit logboeken halen

Serverlogboeken, applicatielogboeken en CSV-exports zijn semi-gestructureerde tekst, en regex is hoe je velden eruit trekt. Leg groepen vast en pak de tijdstempel, het niveau en de verzoek-ID. De uitsplitsing van de tester&#39;s per wedstrijdgroep is precies de weergave die u hier nodig heeft: plak een tiental echte logregels en bevestig dat elk veld in de juiste groep over alle regels heen terechtkomt, niet alleen over de nette eerste regel. Dit sluit aan bij de API-foutopsporingswerkstroom Waar responsinstanties en headers worden geschraapt voor specifieke waarden.

Zoek-en-vervangen over een codebase

Editors en IDE's ondersteunen Regex in Find-and-Replace, en een slecht patroon daar kan veel meer herschrijven dan bedoeld. testen evenknie kant in een speciale tester voordat u de vervanging uitvoert is goedkope verzekering - kijk precies wat het patroon selecteert over een representatieve steekproef, voer de vervanging dan met vertrouwen uit Mijn redirect-map ramp was fundamenteel een find-and-replace die ik nooit eerst getest tegen echte input.

Regel leren en onderwijzen

De live markering maakt de tester een echt leermiddel. Bouw een patroon per keer en kijk hoe de matchset krimpt en groei terwijl je ankers, kwantoren en klassen toevoegt. door \d+ pak een heel getal en dan \d Grijp een enkel cijfer doet meer voor begrip dan enige prozaverklaring. Wanneer u klaar bent om een patroon te assembleren van componenten in plaats van een bestaande te debuggen, de Regex-bouwer is het begeleidende hulpmiddel.

Hoe vermijd je de lucifervall van nullengte?

Een patroon dat kan overeenkomen met een lege tekenreeks - a*, \d*, (foo)?- kan &quot;match&quot; op elke positie tussen personages, waardoor een stortvloed aan lege overeenkomsten ontstaat Naïeve matchingcode die dat wel doet&#39; t voor altijd voorbij een matchloops van nul lengte gaat De klavier beschermt dit intern door altijd op te rukken, dus het hangt nooit, maar het zal schouwspel jij de lege lucifers.

Dat scherm is een functie, geen ruis. Een stapel lege lucifers is de tester die je vertelt dat je kwantificator te toegeeflijk is. Als je "een of meer cijfers" bedoelde," schreef je \d* Wanneer je wilde \d+. Als een groep vereist zou zijn, markeerde u deze optioneel met ?. Het zien van de lege overeenkomsten is de diagnostiek die u wijst op de oplossing. Als je patroon goed is, zijn de overeenkomsten de substrings waar je om geeft en niets anders.

JavaScript Regex versus andere smaken: een snelle vergelijking

gelaatstrek JavaScript (deze tester) PCR (PHP) pydon re
Genoemde groepen (?<name>...) (?<name>...) of (?P<name>...) (?P<name>...)
kijk achter Ondersteund (moderne motoren) ondersteund ondersteund
Atoomgroepen / Bezittend Niet ondersteund ondersteund schraal
terugval Niet ondersteund ondersteund Niet ondersteund
Dot komt overeen met nieuwe lijnvlag s (doe) s (doe) re.DOTALL
Unicode-eigenschap \p{...} vereist u kwijnen vereist u beperkend bijwoord regex Alleen module
plakkerig matchen y kwijnen \G zich vestig \G-zoals via match stand

De les van de tabel is dat "regex" een familie is, geen standaard. De syntaxis overlapt genoeg om je in slaap patronen in verschillende talen te laten sussen, en de verschillen zijn precies de geavanceerde functies die je bereikt bij moeilijke problemen. Test in je doelsmaak. Voor JavaScript en Node is dat deze tester; Webontwikkelaar Toolkit Behandelt waar de andere taalspecifieke tools passen.

Is het veilig om regex te testen op gevoelige tekst?

De tekst waar je Regex tegen test is vaak het gevoelige soort: productielogboekregels met IP-adressen en gebruikers-ID's, export met e-mailadressen, configuratiebestanden met interne hostnamen. Dat zijn precies de gegevens die u zou moeten Plak in een tool die het naar een server verzendt.

de Toolz.dev regex-tester draait volledig in uw browser De patrooncompilatie, de matching, de groepsextractie - het is allemaal JavaScript aan de clientzijde, zonder netwerkverzoek dat uw patroon of uw tekst ergens bevat Knip uw verbinding af nadat de pagina is geladen en het blijft werken Dat&#39; is een architectuurgarantie, geen zin over privacybeleid, en it&#39; is hetzelfde browser-eerste principe achter elk hulpmiddel in de set, uiteengezet in de Gids voor gegevensprivacy.

Dat betekent dat je de echte logregels kunt plakken - degene met de daadwerkelijke PII die een patroon maakt &#39; s randgevallen verschijnen - en er veilig tegen kunt debuggen. Dat en#39; is het hele punt: de tester is alleen nuttig als je hem echte invoer geeft, en echte invoer is vaak precies wat je kunt &#39;t naar iemand anders sturen&#39;s server.

FAQ

Hoe test ik een reguliere expressie online?

Voer uw patroon in het patroonveld in zonder de omliggende schuine strepen, kies uw vlaggen en plak voorbeeldtekst in het testgebied. Wedstrijden markeren direct en voor elke wedstrijd worden capture-groepen vermeld. Alles draait in uw browser - er wordt niets geüpload.

Welke regex-smaak gebruikt deze tester?

Het maakt gebruik van de javascript (ecmascript) regexp-engine die in uw browser is ingebouwd, die identiek is aan die in node.js. Resultaten komen overeen met hoe hetzelfde patroon zich gedraagt in JavaScript en TypeScript. JavaScript Regex verschilt van PCRE, Python&#39;s RE-module en Java-patronen in sommige geavanceerde functies zoals atomaire groepen en recursie, dus test de smaak waarin je gaat implementeren.

Wat betekenen de Regex vlaggen G, I, M en S?

De vlag g (global) vindt alle overeenkomsten in plaats van te stoppen bij de eerste De vlag i maakt bijpassende naamval-ongevoelig De vlag m (multiline) zorgt ervoor dat de ^ en $ ankers overeenkomen bij regeleindes in plaats van alleen de tekenreeks begin en einde De vlag s (dotAll) laat de punt overeenkomen met nieuwregeltekens ook De m - en s-vlaggen worden vaak verward - m verandert de ankers, s verandert de punt.

Hoe werken capture-groepen in de tester?

Haakjes in uw patroon maken vastleggroepen. De tester vermeldt elke genummerde groep met de tekst die hij voor elke wedstrijd heeft vastgelegd, zodat u kunt controleren welk deel van de string elk deel van het patroon vastgrijpt. Genoemde groepen geschreven als (?...) worden op naam weergegeven naast de genummerde groepen.

Waarom komt mijn regex overeen met niets of gooit een fout?

Een patroon dat overeenkomt met niets heeft meestal een overspecifiek karakter of een niet-ontsnapt speciaal karakter zoals een letterlijke punt of plusteken. Een patroon dat een fout veroorzaakt, heeft een syntaxisprobleem, zoals een ongebalanceerde haakje of haakjes. De tester geeft de exacte foutmelding van de motor weer, zodat u het probleem snel kunt lokaliseren.

Hoe kan ik over meerdere lijnen heen matchen?

Schakel de S (dotall)-vlag in als u de punt nodig heeft om regeleinden te overspannen en schakel de M (multiline) vlag in als u wilt dat de ankers ^ en $ overeenkomen aan het begin en einde van elke regel. Door beide te combineren, kan een enkel patroon natuurlijk werken tegen multi-line invoer zoals logboeken of CSV-rijen.

Is het veilig om regex te testen op gevoelige gegevens?

Ja. Alle matching gebeurt in JavaScript in uw browser - er wordt geen patroon of testtekst naar een server verzonden, er wordt niets geregistreerd en de tool werkt met uitgeschakelde verbinding U kunt veilig testen tegen logbestanden, persoonlijke gegevens of eigen formaten.

Wat is het verschil tussen een regex-tester en een regex-bouwer?

Een regex-tester voert een bestaand patroon uit tegen tekst, zodat u het kunt verifiëren en debuggen, terwijl een regex-builder u helpt een patroon te construeren uit componenten of veelvoorkomende sjablonen. Gebruik de Regex Builder op deze site om een patroon samen te stellen en breng het vervolgens naar de tester om het te controleren met echte voorbeeldgegevens.


Reguliere expressies blijven alleen schrijven totdat je ze uitvoert tegen echte invoer, en de fouten zijn stil - niets komt overeen, te veel komt overeen, de verkeerde groep legt vast en geen fout vertelt je Een tester maakt het patroon zichtbaar: Plak je regex, voer het de lelijke echte tekst in en kijk precies wat het grijpt voordat het het verkeerde grijpt in de productie.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!