Regex-tester
Test JavaScript regulære uttrykk live. Se treff fremhevet og fangstgrupper listet.
Fremhevede treff
Treff og grupper
- Skriv regex-mønsteret ditt i feltet over (du trenger ikke omslutte det i skråstreker).
- Slå av/på flaggene du vil ha: g for alle treff, i for ufølsom for store/små bokstaver, osv.
- Lim inn eller skriv teststrengen i Teststreng-boksen.
- Se treff fremheves i sanntid; inspiser fangede grupper i tabellen under.
Hva gjør det?
Denne testeren kjører mønsteret ditt mot teststrengen ved hjelp av nettleserens innebygde RegExp-motor — den samme som Node.js, Deno og enhver nettleser bruker. Treff fremheves inline. Nummererte og navngitte fangstgrupper trekkes ut i en tabell slik at du ser nøyaktig hva hvert parentessegment fanget.
Eksempel
Mønster (med flagg g):
\b(\w+)@(\w+\.\w+)\b Teststreng:
Contact us at [email protected] or [email protected]. Not an email: foo@bar (no TLD). Treff:
1 [email protected] $1: hello $2: example.com
2 [email protected] $1: support $2: happycoder.dev foo@bar gir ingen treff fordi \w+\.\w+ krever et punktum i domenet.
Hvorfor treffer ikke regexen min?
- Glemt g-flagget. Uten det returneres bare første treff. /cat/.exec("cat cat") finner én "cat"; /cat/g finner begge.
- Ikke-escapede metategn. example.com matcher også examplexcom fordi . matcher hvilket som helst tegn. Escape det: example\.com.
- Grådig matching sluker for mye. <.*> på <a><b> fanger hele greia. Bruk lazy <.*?> eller <[^>]*> for å stoppe ved første >.
- Forvirring rundt ordgrense. \b er en posisjon mellom et ord-tegn og et ikke-ord-tegn. Mønstre som \bfoo-bar\b feiler fordi - allerede er en ikke-ord-grense i midten.
- Store/små bokstaver samsvarer ikke. [a-z]+ vil ikke matche Hello. Legg til i-flagget eller inkluder [A-Za-z]+.
- Flerlinje ^ / $. Uten m-flagget ankres de bare til hele strengen, ikke hver linje. Slå på m hvis du skanner loggsinjer.
Ofte stilte spørsmål
Hvilken regex-variant bruker denne testeren?
JavaScript (ECMAScript) regex, via nettleserens innebygde RegExp-motor. Det skiller seg fra PCRE (PHP, Perl), Pythons re-modul, og POSIX regex på flere måter: ingen rekursjon, ingen possessive kvantifikatorer, navngitte grupper bruker (?<name>...) i stedet for (?P<name>...), og tegnklasse-forkortelser som \d er kun ASCII med mindre du legger til u-flagget.
Støtter det lookbehind?
Ja. Lookbehind-assertions som (?<=foo)bar og (?<!foo)bar ble lagt til i ES2018 og er støttet i alle gjeldende Chromium-, Firefox- og Safari-bygg. Hvis du sikter mot veldig gamle nettlesere i produksjon, sjekk caniuse før du stoler på dem — men denne testeren selv kjører dem fint.
Hva betyr flaggene g, i, m, s og u?
g finner alle treff i stedet for bare det første. i gjør matching ufølsom for store/små bokstaver. m gjør at ^ og $ matcher starten og slutten av hver linje i stedet for hele strengen. s (dotall) lar . matche linjeskift. u aktiverer full Unicode-håndtering og strengere escape-parsing. Velg bare flaggene du trenger — g spesielt endrer hvor mange treff du får.
Hvorfor matcher min grådige kvantifikator for mye?
Kvantifikatorer som *, + og {n,} er grådige som standard — de matcher så mye som mulig og gir bare tilbake hvis resten av mønsteret feiler. Legg til en ? for å gjøre dem late: .*? matcher så lite som mulig. Vanlig løsning for <a>.*</a> som spiser på tvers av flere tagger: bruk <a>.*?</a> eller den negerte klassen <a>[^<]*</a>.
Hvordan refererer jeg til en fanget gruppe senere i mønsteret eller erstatningen?
Inne i mønsteret, bruk \1, \2 osv. for å matche samme tekst som en tidligere gruppe fanget — (\w+)\s+\1 matcher gjentatte ord. I en erstatningsstreng (ikke støttet i denne live-testeren, men i String.replace) bruk $1, $2. Navngitte grupper bruker \k<name> inne i mønsteret og $<name> i erstatninger.
Hvorfor brekker regexen min når mønsteret inneholder et punktum, skråstrek eller parentes?
Det er regex-metategn. For å matche dem bokstavelig, escape med en backslash: \. for punktum, \/ for skråstrek (valgfritt i en new RegExp-streng, påkrevd mellom /.../ literals), \( og \) for parenteser. Spesialtegnene er . * + ? ^ $ { } ( ) | [ ] \ — alle disse som bokstavelig tekst må escapes.
Lagrer dere regex eller testtekst jeg skriver her?
Nei. Vi lagrer ikke mønstrene du skriver eller teksten du tester dem mot. Alt du skriver forkastes i det øyeblikket du lukker eller oppdaterer fanen — ingen logger, ingen registrering hos oss av hva du matchet. Hvis du vil ha ekstra trygghet, vil nettleserens utviklerverktøy bekrefte dette.