Slik gjør du
Slik tester du et regex uten å installere noe
Du har skrevet et mønster og trenger å vite om det faktisk treffer det du forventer før du legger det inn i koden. Å installere et skrivebordsverktøy eller lime inn en privat logg på et tilfeldig nettsted er unødvendig, og ofte risikabelt. Denne veiledningen viser hvordan du kjører et regex mot din egen tekst rett i nettleseren, slår av og på flaggene som endrer oppførselen, leser fangstgruppene det henter ut, og ser treffene bli fremhevet direkte i teksten, mens mønsteret og teksten aldri forlater fanen din.
Steg for steg
- Åpne regex-testeren og skriv mønsteret ditt i feltet mellom de to skråstrekene. Du skriver ikke skråstrekene selv: verktøyet viser dem slik at du ser mønsteret slik en motor leser det. Lim inn eksempelteksten din i boksen nedenfor, for eksempel noen logglinjer, en e-postliste eller en kodeblokk du vil søke i.

- Sett flaggene i den lille boksen ved siden av mønsteret. Flagget g finner hvert treff i stedet for å stoppe ved det første; i gjør treffet ufølsomt for store og små bokstaver; m lar ankrene ^ og $ treffe starten og slutten av hver linje i stedet for hele teksten; s lar punktum også treffe linjeskift. Kombiner dem fritt, for eksempel gim.
- Trykk Test. Hvert treff fremheves direkte i teksten din, og listen nedenfor viser hvert treff med sin posisjon og verdien av hver fangstgruppe. Juster mønsteret og kjør det på nytt: forhåndsvisningen oppdateres slik at du kan snevre inn mønsteret til det fanger akkurat det du mente og ingenting annet.

Fangstgrupper, navngitte og nummererte
En fangstgruppe er den delen av mønsteret ditt som er pakket inn i parenteser, og den er måten du henter en bit ut av hvert treff på, i stedet for bare å bekrefte at helheten traff. Nummererte grupper telles fra venstre mot høyre etter åpningsparentesen: i (\d{4})-(\d{2})-(\d{2}) er gruppe 1 året, gruppe 2 måneden, gruppe 3 dagen. Navngitte grupper bruker syntaksen (?<name>...), så (?<year>\d{4}) leses langt bedre enn et nakent tall når mønsteret vokser. Hvis du bare vil gruppere uten å fange, for eksempel for å bruke en kvantifikator på flere tegn, bruk en ikke-fangende gruppe (?:...) slik at den ikke fyller opp resultatlisten din. Testeren viser verdien av hver gruppe for hvert treff, noe som er den raskeste måten å bekrefte at du henter ut riktig bit på.
Når et mønster henger eller oppfører seg rart
To problemer dukker opp gang på gang. Det første er katastrofal tilbakesporing: et mønster som (a+)+$ kjørt mot en lang streng uten treff kan få motoren til å prøve et eksponentielt antall stier og fryse. Testeren kjører hver test i en Web Worker med en kort vakthund, så i stedet for en frosset fane får du en tydelig melding og kan forenkle mønsteret, vanligvis ved å gjøre en kvantifikator possessiv i ånden, forankre den eller unngå nøstet gjentakelse. Det andre er grådig kontra lat treffing: som standard griper .* så mye den kan, så for å treffe innholdet i en enkelt HTML-tagg vil du ha den late formen .*? i stedet. Hvis du sammenligner to litt ulike versjoner av en streng for å se hva mønsteret ditt bør sikte mot, stiller tekstdiff-verktøyet dem opp ved siden av hverandre slik at forskjellen blir åpenbar før du skriver uttrykket.
Slik evaluerer nettleseren regex-en din
Moderne nettlesere leveres med en innebygd ECMAScript regex-motor som støtter det fulle flaggsettet: ufølsom-for-store/små-bokstaver-matching (i), flerlinjemodus (m), dotAll (s), Unicode (u) og det klebrige flagget (y). Når du skriver inn et mønster i testeren, kompilerer motoren det til en intern NFA og evaluerer det mot teststrengen din i sanntid, og rapporterer hver kamposisjon og eventuelle fangstgrupper. Tilbakesporing skjer lokalt på CPU-en din: et mønster som (a+)+ på en lang ikke-matchende streng kan spinne i sekunder, og å se den forsinkelsen i nettleseren er nyttig tilbakemelding før du distribuerer mønsteret i produksjonskode. Ingen tekst forlater siden, så du kan lime inn loggeksempler eller annet innhold uten å rute det gjennom en tredjeparts-server.
Verktøyene brukt i denne guiden
Ofte stilte spørsmål
Blir mønsteret mitt eller testteksten sendt til en server?
Nei. Regex-et kjører inne i en Web Worker i din egen nettleser, så mønsteret og teksten du tester mot blir værende i fanen. Dette er viktig fordi teksten du limer inn ofte er en ekte logg, en kundeliste eller en intern konfigurasjon, akkurat den typen data du ikke vil ha på noen andres server. Åpne nettverkspanelet i utviklerverktøyene mens du trykker Test, og du vil ikke se noen forespørsel bære teksten din ut. Det fortsetter også å virke frakoblet når siden først er lastet.
Hvilken regex-variant bruker testeren?
Den bruker regex-motoren for regulære uttrykk i JavaScript som er innebygd i nettleseren din, den samme som kjører i Node.js og på enhver nettside. Det dekker den vanlige syntaksen: tegnklasser, kvantifikatorer, ankre, alternering, nummererte og navngitte fangstgrupper, fremoversøk og bakoversøk. Noen få funksjoner fra andre varianter, som Perl-stil rekursjon eller possessive kvantifikatorer, er ikke en del av JavaScript-motoren, så hvis et mønster du kopierte fra et PHP- eller Python-prosjekt oppfører seg annerledes, er den forskjellen i variant vanligvis grunnen.