Regex tester – preizkus regularnih izrazov
Vpišite vzorec, označite potrebne zastavice in prilepite besedilo: vsak zadetek se med tipkanjem označi in izpiše s položajem in zajemnimi skupinami. Vzorec se izvaja v lastnem mehanizmu regularnih izrazov JavaScript v vašem brskalniku, zato se rezultati ujemajo z vašo kodo, besedilo pa ostane v vaši napravi.
0 znakov · 0 besed · 0 vrstic
Ujemanja so označena tukaj.0 znakov · 0 besed · 0 vrstic
Deluje povsem v tem zavihku brskalnika. Vaše besedilo se nikoli ne naloži in ne shrani.
Žetoni regex v JavaScriptu
Stolpec prvega ujemanja je nastal z izvedbo vsakega vzorca na njegovem besedilu z mehanizmom JavaScript, ki je zgradil to stran.
| Žeton | Pomen | Vzorec | Besedilo | Prvo ujemanje |
|---|---|---|---|---|
\d | Števka 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Črka, števka ali podčrtaj (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Beli prostor, vključno s tabulatorji in prelomi vrstic | /\s+/ | two spaces | |
. | Kateri koli znak razen preloma vrstice (razen z s) | /a.c/ | abc a-c | abc |
^ $ | Začetek in konec vnosa (ali vrstice, z m) | /^\w+$/ | single | single |
[abc] | Eden od navedenih znakov | /[aeiou]/ | rhythm and blues | a |
[^abc] | Kateri koli znak, ki ni naveden | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 ali več, 1 ali več, 0 ali 1 | /colou?r/ | color colour | color |
{n,m} | Med n in m krat | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Zajemna skupina | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Imenovana zajemna skupina | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Skupina brez zajema | /(?:ab)+/ | ababab! | ababab |
a|b | Ena ali druga stran | /cat|dog/ | hotdog | dog |
\b | Meja besede | /\bcat\b/ | concat cat | cat |
(?=…) | Sledi (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Ne sledi (negativni lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Katera koli črka Unicode (potrebuje u) | /\p{L}+/u | naïve 東京 | naïve |
Šest zastavic in kaj spremenijo
g (global) najde vsa ujemanja namesto samo prvega; brez njega seznam vsebuje en sam vnos. i ne razlikuje velikih in malih črk. m (multiline) poskrbi, da se ^ in $ ujemata na začetku in koncu vsake vrstice, ne le celotnega besedila, kar potrebujete na primer za vzorec za presledke na koncu vrstice. s (dotAll, dodan v ES2018) omogoči, da se . ujema tudi z znaki za prelom vrstice. u (unicode) obravnava besedilo kot kodne točke, zato se emoji šteje kot en znak, in omogoča ubežne sekvence lastnosti, kot je \p{L} za katero koli črko v katerem koli pisavi. y (sticky) se ujema le natanko na trenutnem položaju, v tem načinu delujejo razčlenjevalniki. JavaScript pozna tudi d za indekse ujemanj in v za množične operacije v razredih; ta preizkuševalnik uporablja le zgornjih šest.
Pod preizkusnim besedilom je pri vsakem ujemanju prikazan njegov indeks in skupine. Oštevilčene skupine nastanejo iz navadnih oklepajev, (?:…) združuje brez zajemanja, (?<year>\d{4}) pa ustvari poimenovano skupino, ki se prikaže pod svojim imenom, kot kaže primer z datumom ISO. Meni Pogosti vzorci vstavi preizkušena izhodišča za e-poštne naslove, URL-je, naslove IPv4, barve hex, UUID-je, ponovljene besede in presledke na koncu vrstice. Vzorec za e-pošto imejte za grobo preverjanje, ne za potrjevanje: celotna slovnica naslovov je veliko bolj dopustna, edini pravi preizkus pa je pošiljanje sporočila.
Pogled nazaj (lookbehind) in katastrofalno vračanje
Pogledi okoli preverjajo, kaj obdaja položaj, ne da bi to porabili. Pogled naprej, (?=…) in (?!…), je v JavaScriptu od nekdaj; pogled nazaj, (?<=…) in (?<!…), je prispel v ES2018 in zzzajel vse večje brskalnike, ko ga je leta 2023 uvedel Safari 16.4. Tako (?<=\$)\d+ v "$42" najde 42, ne da bi vključil znak za dolar. Za razliko od številnih drugih pogonov JavaScript dovoljuje pogled nazaj poljubne dolžine.
Pogon JavaScript uporablja vračanje: ko pot odpove, se vrne in poskusi alternative. Gnezdeni kvantifikatorji, kot je (a+)+$, mu dajo eksponentno število načinov razdelitve istega besedila, zato lahko niz 30 črk a, ki mu sledi x, traja sekunde, nekaj črk več pa ure. To je katastrofalno vračanje, na strežnikih pa preraste v ReDoS, napad zavrnitve storitve; ena sama pravila WAF s to napako je 2. julija 2019 za približno pol ure podrlo omrežje Cloudflare. Ker ta preizkuševalnik teče v vašem zavihku, lahko tak vzorec zamrzne stran; ponovno naložite stran in vzorec popravite tako, da noben par kvantifikatorjev ne more zajeti istih znakov, z ožjimi razredi, kot je [^,]* namesto .*, ali s sidri. Za urejanje samega besedila namesto ujemanja glejte orodja za besedilo; več razvijalskih pripomočkov je v središču orodja za razvijalce.
Pogosto zastavljena vprašanja
- Zakaj regularni izraz najde samo en zadetek?
- Zastavica g je izklopljena. Brez nje pogon po prvem ujemanju neha iskati. Označite g, da izpišete vse pojavitve; tudi samo zastavica y najde več ujemanj, vendar le, če si neposredno sledijo.
- Ali \d v JavaScriptu ujame tudi števke iz drugih pisav?
- Ne. V JavaScriptu \d pomeni samo 0 do 9, \w pa samo ASCII črke, števke in podčrtaj, tudi z zastavico u. Za druge pisave uporabite \p{Nd} ali \p{L} z u.
- Ali se bo vzorec, preizkušen tukaj, enako obnašal v Pythonu ali PHP?
- Osnovna sintaksa se prenese, podrobnosti pa se razlikujejo: poimenovane skupine v Pythonu so zapisane
(?P<name>…), PHP in Python podpirata posesivne kvantifikatorje, ki jih JavaScript nima, pravila za pogled nazaj pa se razlikujejo. Vzorec znova preizkusite v ciljnem pogonu. - Kako ujamem dobesedno piko ali oklepaj?
- Predenj dodajte poševnico nazaj:
\.se ujema s piko,\[pa z odprtim oklepajem. Znotraj razreda znakov je večina simbolov že dobesednih, zato se tudi[.]ujema samo s piko. - Zakaj je stran zamrznila, medtem ko sem vpisoval vzorec?
- Vzorec je na vašem besedilu verjetno sprožil katastrofalno vračanje. Ponovno naložite stran, nato se izogibajte gnezdenim kvantifikatorjem, kot sta
(.*)*ali(a+)+, in poskrbite, da se vsak del ujema s čim manj znaki.