Geen upload, 100% lokaal, geen account

Stappenplan

Een regex testen zonder iets te installeren

Je hebt een patroon geschreven en je wilt weten of het echt matcht wat je verwacht voordat je het in code gebruikt. Een desktoptool installeren of een privelog in een willekeurige website plakken is overdreven, en vaak riskant. Deze gids laat zien hoe je een regex op je eigen tekst uitvoert, rechtstreeks in de browser, de vlaggen omschakelt die het gedrag veranderen, de vanggroepen leest die het eruit haalt en de matches inline ziet oplichten, terwijl het patroon en de tekst je tabblad nooit verlaten.

Stap voor stap

  1. Open de regextester en typ je patroon in het veld tussen de twee schuine strepen. De schuine strepen typ je niet zelf: de tool toont ze zodat je het patroon ziet zoals een engine het leest. Plak je voorbeeldtekst in het vak eronder, bijvoorbeeld een paar logregels, een lijst met e-mailadressen of een stuk code dat je wilt doorzoeken.
    Een regexpatroon en een vlaggenreeks ingevoerd in de tester, met voorbeeldtekst geplakt in het vak eronder
  2. Stel de vlaggen in het kleine vakje naast het patroon in. De vlag g vindt elke match in plaats van bij de eerste te stoppen; i maakt de match hoofdletterongevoelig; m laat de ankers ^ en $ het begin en einde van elke regel matchen in plaats van de hele tekst; s laat de punt ook regeleindes matchen. Combineer ze vrij, bijvoorbeeld gim.
  3. Druk op Test. Elke match wordt direct in je tekst gemarkeerd, en de lijst eronder toont elke match met zijn positie en de waarde van elke vanggroep. Pas het patroon aan en voer het opnieuw uit: de voorvertoning wordt bijgewerkt zodat je het patroon kunt verfijnen totdat het precies vangt wat je bedoelde en niets anders.
    Het testresultaat: matches inline gemarkeerd en een lijst die elke matchpositie en zijn vanggroepen toont

Vanggroepen, met naam en met nummer

Een vanggroep is het deel van je patroon dat tussen haakjes staat, en zo haal je een stukje uit elke match in plaats van alleen te bevestigen dat het geheel matcht. Genummerde groepen worden van links naar rechts geteld op hun openingshaakje: in (\d{4})-(\d{2})-(\d{2}) is groep 1 het jaar, groep 2 de maand, groep 3 de dag. Groepen met naam gebruiken de syntaxis (?<name>...), dus (?<year>\d{4}) leest veel prettiger dan een kaal nummer wanneer het patroon groeit. Als je alleen wilt groeperen zonder te vangen, bijvoorbeeld om een kwantor op meerdere tekens toe te passen, gebruik dan een niet-vangende groep (?:...) zodat hij je resultatenlijst niet volpropt. De tester toont de waarde van elke groep voor elke match, wat de snelste manier is om te bevestigen dat je het juiste stukje eruit haalt.

Wanneer een patroon vastloopt of zich misdraagt

Twee problemen duiken keer op keer op. Het eerste is catastrofaal terugkrabbelen: een patroon als (a+)+$ uitgevoerd op een lange niet-matchende string kan de engine een exponentieel aantal paden laten proberen en doen vastlopen. De tester voert elke test uit in een Web Worker met een korte waakhond, dus in plaats van een vastgelopen tabblad krijg je een duidelijke melding en kun je het patroon vereenvoudigen, meestal door een kwantor in geest possessief te maken, hem te verankeren of geneste herhaling te vermijden. Het tweede is hebberig versus lui matchen: standaard pakt .* zoveel mogelijk, dus om de inhoud van een enkele HTML-tag te matchen wil je in plaats daarvan de luie vorm .*?. Als je twee licht verschillende versies van een string vergelijkt om te zien waar je patroon op moet mikken, zet de tekstdiff-tool ze naast elkaar zodat het verschil duidelijk is voordat je de expressie schrijft.

Hoe de browser uw regex evalueert

Moderne browsers bevatten een ingebouwde ECMAScript-regex-engine die de volledige vlaggenset ondersteunt: hoofdlettergevoelloze overeenkomst (i), meerregelige modus (m), dotAll (s), Unicode (u) en de sticky-vlag (y). Wanneer u een patroon in de tester typt, compileert de engine het naar een interne NFA en evalueert het tegen uw testtekenreeks in realtime, waarbij elke overeenkomstpositie en eventuele vastleggroepen worden gerapporteerd. Backtracking vindt lokaal plaats op uw CPU: een patroon zoals (a+)+ op een lange niet-overeenkomende tekenreeks kan seconden draaien, en die vertraging in de browser zien is nuttige terugkoppeling voordat u het patroon in productiecode implementeert. Geen tekst verlaat de pagina, zodat u logvoorbeelden of andere invoer kunt plakken zonder ze via een externe server te routeren.

De tools die in deze gids worden gebruikt

Veelgestelde vragen

Wordt mijn patroon of testtekst naar een server gestuurd?

Nee. De regex draait in een Web Worker in je eigen browser, dus het patroon en de tekst waarop je test blijven in het tabblad. Dat is belangrijk omdat de tekst die je plakt vaak een echt log, een klantenlijst of een interne configuratie is, precies het soort gegevens dat je niet op de server van iemand anders wilt hebben. Open het Netwerk-paneel in je ontwikkelaarstools terwijl je op Test drukt en je ziet geen enkel verzoek je tekst naar buiten dragen. Het blijft ook offline werken zodra de pagina is geladen.

Welke regex-variant gebruikt de tester?

Hij gebruikt de engine voor reguliere expressies van JavaScript die in je browser is ingebouwd, dezelfde die in Node.js en op elke webpagina draait. Dat dekt de gangbare syntaxis: tekenklassen, kwantoren, ankers, alternatie, genummerde en benoemde vanggroepen, vooruitkijken en achteruitkijken. Een paar functies uit andere varianten, zoals recursie in Perl-stijl of possessieve kwantoren, horen niet bij de JavaScript-engine, dus als een patroon dat je uit een PHP- of Python-project hebt gekopieerd zich anders gedraagt, is dat verschil in variant meestal de reden.

Bronnen