UltKit

Regex-toetser

Tik 'n patroon in, merk die vlae wat u nodig het en plak teks: elke treffer word uitgelig terwyl u tik en saam met sy posisie en vanggroepe gelys. Die patroon loop op u blaaier se eie JavaScript-regex-enjin, dus stem die resultate ooreen met u kode en die teks bly op u toestel.

Vlae

0 karakters · 0 woorde · 0 reëls

Treffers word hier uitgelig.

0 karakters · 0 woorde · 0 reëls

Werk heeltemal in hierdie blaaieroortjie. Jou teks word nooit opgelaai of gestoor nie.

JavaScript-regex-tekens

Die eerste-treffer-kolom is geskep deur elke patroon op sy teks uit te voer met die JavaScript-enjin wat hierdie bladsy gebou het.

TekenBetekenisPatroonTeksEerste treffer
\dSyfer 0–9/\d+/Order 66 shipped66
\wLetter, syfer of onderstreep (ASCII)/\w+/snake_case-idsnake_case
\sWitruimte, insluitend tabs en reëlbreuke/\s+/two spaces
.Enige karakter behalwe 'n reëlbreuk (tensy s)/a.c/abc a-cabc
^ $Begin en einde van invoer (of reël, met m)/^\w+$/singlesingle
[abc]Een van die gelyste karakters/[aeiou]/rhythm and bluesa
[^abc]Enige karakter wat nie gelys is nie/[^0-9]+/2026-10-18-
* + ?0 of meer, 1 of meer, 0 of 1/colou?r/color colourcolor
{n,m}Tussen n en m keer/\d{2,4}/7 42 1999 12345642
(…)Vangende groep/(\d+)px/width: 320px320px
(?<name>…)Benoemde vangende groep/(?<h>\d\d):(?<m>\d\d)/at 09:4509:45
(?:…)Groep sonder vang/(?:ab)+/ababab!ababab
a|bEnige kant/cat|dog/hotdogdog
\bWoordgrens/\bcat\b/concat catcat
(?=…)Gevolg deur (lookahead)/\d+(?=%)/50 of 75%75
(?<!…)Nie voorafgegaan deur nie (negatiewe lookbehind)/(?<!\$)\b\d+/$30 or 4040
\p{L}Enige Unicode-letter (vereis u)/\p{L}+/unaïve 東京naïve

Die ses vlae en wat hulle verander

g (global) vind elke treffer in plaas daarvan om by die eerste te stop; daarsonder bevat die lys een inskrywing. i ignoreer hoofletters en kleinletters. m (multiline) laat ^ en $ by die begin en einde van elke reël pas eerder as net van die hele teks, wat is wat jy wil hê vir 'n patroon soos agterlopende spasies. s (dotAll, bygevoeg in ES2018) laat . ook reëlbreuke pas. u (unicode) hanteer teks as kodepunte, sodat 'n emoji as een karakter tel, en aktiveer eienskapontsnappings soos \p{L} vir enige letter in enige skrif. y (sticky) pas net presies by die huidige posisie, die modus wat tokenizers gebruik. JavaScript het ook d vir passingsindekse en v vir stelbewerkings in klasse; hierdie toetser hou by die ses hierbo.

Onder die toetsteks wys elke treffer sy indeks en sy groepe. Genommerde groepe kom van gewone hakies, (?:…) groepeer sonder om vas te vang, en (?<year>\d{4}) skep 'n benoemde groep wat by sy naam verskyn, soos die ISO-datummonster wys. Die Algemene patrone-kieslys voeg getoetste beginpunte in vir e-posadresse, URL's, IPv4-adresse, heks-kleure, UUID's, herhaalde woorde en agterlopende spasies. Beskou die e-pospatroon as 'n verstandstoets, nie as validering nie: die volledige adresgrammatika is veel toegeeflik, en die enigste egte toets is om 'n boodskap te stuur.

Lookbehind en katastrofiese backtracking

Lookarounds toets wat rondom 'n posisie is sonder om dit te verbruik. Lookahead, (?=…) en (?!…), was nog altyd deel van JavaScript; lookbehind, (?<=…) en (?<!…), het in ES2018 verskyn en elke groot blaaier bereik toe Safari 16.4 dit in 2023 vrygestel het. So (?<=\$)\d+ vind 42 in "$42" sonder om die dollarteken in te sluit. Anders as in baie ander enjins laat JavaScript lookbehind van enige lengte toe.

Die JavaScript-enjin gebruik terugsporing: wanneer 'n pad misluk, gaan dit terug en probeer die alternatiewe. Geneste kwantifiseerders soos (a+)+$ gee dit 'n eksponensiële aantal maniere om dieselfde teks te verdeel, so 'n string van 30 a's gevolg deur 'n x kan sekondes neem en 'n paar meer letters kan ure neem. Dit is katastrofiese terugsporing, en op bedieners word dit ReDoS, 'n diensweieringsaanval; een enkele WAF-reël met hierdie fout het op 2 Julie 2019 Cloudflare se netwerk vir omtrent 'n halfuur laat uitval. Omdat hierdie toetser in jou blaaieroortjie loop, kan so 'n patroon die bladsy laat vries; herlaai en skryf dit so oor dat geen twee kwantifiseerders dieselfde karakters kan opeis nie, deur nouer klasse soos [^,]* in plaas van .* te gebruik, of ankers. Om die teks self te wysig eerder as om dit te pas, kyk die teksgereedskap; meer ontwikkelaarshulpmiddels is in die ontwikkelaarsgereedskap-spil.

Gereelde vrae

Hoekom vind my regex net een treffer?
Die g-vlag is af. Daarsonder stop die enjin ná die eerste treffer. Merk g om elke voorkoms te lys; die y-vlag alleen vind ook verskeie, maar net wanneer hulle direk op mekaar volg.
Pas \d in JavaScript ook syfers uit ander skrifte?
Nee. In JavaScript beteken \d net 0 tot 9 en \w net ASCII-letters, syfers en onderstreep, selfs met die u-vlag. Gebruik \p{Nd} of \p{L} met u vir ander skrifte.
Sal 'n patroon wat hier getoets is, in Python of PHP dieselfde werk?
Basiese sintaksis dra oor, maar besonderhede verskil: Python se benoemde groepe word (?P<name>…) geskryf, PHP en Python ondersteun besitlike kwantifiseerders wat JavaScript nie het nie, en lookbehind-reëls verskil. Toets weer in die teikenenjin.
Hoe pas ek 'n letterlike punt of hakie?
Ontsnap dit met 'n truskuinsstreep: \. pas 'n punt en \[ 'n openingshakie. Binne 'n karakterklas is die meeste simbole reeds letterlik, so [.] pas ook net 'n punt.
Hoekom het die bladsy gevries terwyl ek 'n patroon getik het?
Die patroon het waarskynlik katastrofiese terugsporing op jou teks veroorsaak. Herlaai, vermy dan geneste kwantifiseerders soos (.*)* of (a+)+ en laat elke deel so min as moontlik pas.