Sådan gør du
Sådan tester du et regex uden at installere noget
Du har skrevet et mønster, og du har brug for at vide, om det faktisk matcher det, du forventer, før du lægger det ind i koden. At installere et skrivebordsværktøj eller indsætte en privat log på et tilfældigt websted er overkill og ofte risikabelt. Denne vejledning viser, hvordan du kører et regex mod din egen tekst direkte i browseren, slår de flag til og fra, der ændrer adfærden, læser de fangstgrupper, det trækker ud, og ser matchene blive fremhævet direkte i teksten, mens mønsteret og teksten aldrig forlader din fane.
Trin for trin
- Åbn regex-testeren og skriv dit mønster i feltet mellem de to skråstreger. Du skriver ikke skråstregerne selv: værktøjet viser dem, så du ser mønsteret, som en motor læser det. Indsæt din eksempeltekst i boksen nedenfor, for eksempel et par loglinjer, en e-mailliste eller en kodeblok, du vil søge i.

- Sæt flagene i den lille boks ved siden af mønsteret. Flaget g finder hvert match i stedet for at stoppe ved det første; i gør matchet uafhængigt af store og små bogstaver; m lader ankrene ^ og $ matche starten og slutningen af hver linje i stedet for hele teksten; s lader punktummet også matche linjeskift. Kombiner dem frit, for eksempel gim.
- Tryk på Test. Hvert match fremhæves direkte i din tekst, og listen nedenfor viser hvert match med dets position og værdien af hver fangstgruppe. Juster mønsteret og kør det igen: forhåndsvisningen opdateres, så du kan indsnævre mønsteret, indtil det rammer præcis det, du mente, og intet andet.

Fangstgrupper, navngivne og nummererede
En fangstgruppe er den del af dit mønster, der er pakket ind i parenteser, og det er måden, hvorpå du trækker et stykke ud af hvert match i stedet for blot at bekræfte, at det hele matchede. Nummererede grupper tælles fra venstre mod højre efter deres startparentes: i (\d{4})-(\d{2})-(\d{2}) er gruppe 1 året, gruppe 2 måneden, gruppe 3 dagen. Navngivne grupper bruger syntaksen (?<name>...), så (?<year>\d{4}) læses langt bedre end et nøgent tal, når mønsteret vokser. Hvis du kun vil gruppere uden at fange, for eksempel for at anvende en kvantor på flere tegn, så brug en ikke-fangende gruppe (?:...), så den ikke fylder din resultatliste. Testeren viser værdien af hver gruppe for hvert match, hvilket er den hurtigste måde at bekræfte, at du trækker det rigtige stykke ud.
Når et mønster hænger eller opfører sig forkert
To problemer dukker op igen og igen. Det første er katastrofal tilbagesporing: et mønster som (a+)+$ kørt mod en lang streng uden match kan få motoren til at prøve et eksponentielt antal stier og fryse. Testeren kører hver test i en Web Worker med en kort vagthund, så i stedet for en frossen fane får du en klar besked og kan forenkle mønsteret, normalt ved at gøre en kvantor possessiv i ånden, forankre den eller undgå indlejret gentagelse. Det andet er grådigt kontra dovent match: som standard griber .* så meget den kan, så for at matche indholdet i et enkelt HTML-tag vil du have den dovne form .*? i stedet. Hvis du sammenligner to lidt forskellige versioner af en streng for at se, hvad dit mønster bør ramme, stiller tekstdiff-værktøjet dem op ved siden af hinanden, så forskellen er tydelig, før du skriver udtrykket.
Sådan evaluerer browseren dit regex
Moderne browsere leveres med en indbygget ECMAScript regex-motor, der understøtter det fulde flagsæt: case-ufølsom matching (i), multiline-tilstand (m), dotAll (s), Unicode (u) og sticky-flaget (y). Når du skriver et mønster i testeren, kompilerer motoren det til en intern NFA og evaluerer det mod din teststreng i realtid og rapporterer hver matchposition og eventuelle capture-grupper. Backtracking sker lokalt på din CPU: et mønster som (a+)+ på en lang ikke-matchende streng kan snurre i sekunder, og det at se denne stagnation i browseren er nyttig feedback inden implementering af mønsteret i produktionskode. Ingen tekst forlader siden, så du kan indsætte logeksempler eller ethvert input uden at rute det gennem en tredjeparts-server.
Værktøjerne brugt i denne guide
Ofte stillede spørgsmål
Bliver mit mønster eller min testtekst sendt til en server?
Nej. Regex-et kører inde i en Web Worker i din egen browser, så mønsteret og den tekst, du tester mod, bliver i fanen. Det betyder noget, fordi den tekst, du indsætter, ofte er en rigtig log, en kundeliste eller en intern konfiguration, præcis den slags data, du ikke vil have på en andens server. Åbn netværkspanelet i dine udviklerværktøjer, mens du trykker på Test, og du vil ikke se nogen anmodning bære din tekst ud. Det bliver også ved med at virke offline, når siden først er indlæst.
Hvilken regex-variant bruger testeren?
Den bruger den regex-motor til regulære udtryk i JavaScript, der er indbygget i din browser, den samme som kører i Node.js og på enhver webside. Det dækker den almindelige syntaks: tegnklasser, kvantorer, ankre, alternering, nummererede og navngivne fangstgrupper, fremadrettet og bagudrettet søgning. Nogle få funktioner fra andre varianter, såsom Perl-stil rekursion eller possessive kvantorer, er ikke en del af JavaScript-motoren, så hvis et mønster, du kopierede fra et PHP- eller Python-projekt, opfører sig anderledes, er den forskel i variant som regel grunden.