Preskočiť na obsah
TextArray

Regex cheatsheet

Regulárne výrazy sú dostatočne kompaktné, takže syntax sa dá ľahšie vyhľadať ako zapamätať. Táto stránka je celá na jednej obrazovke – triedy, kvantifikátory, kotvy, skupiny, rozhľad, escapovanie a príznaky – s funkčným príkladom pre každý riadok.

Príchuť je JavaScript, čo je to, čo beží vo vašom prehliadači a čo používa tester regulárnych výrazov na tejto stránke. Väčšina z nich je identická v Pythone, Java, Go a PCRE; tam, kde sa príchute rozchádzajú, rozchádzajú sa na hranách — podpora lookbehind, syntax pomenovanej skupiny a či \d znamená „číslica ASCII“ alebo „akákoľvek číslica Unicode“.

Väčšinu prekvapení tvoria dve veci. Kvantifikátory sú nenásytné: vezmú si všetko, čo môžu, a vrátia späť, až keď zvyšok vzoru zlyhá, čo je dôvod, prečo <.+> prehltne dva tagy a <.+?> nie. A alternácia je najvoľnejšia zo všetkých, takže ^a|b$ znamená „začína na a alebo končí na b“ – nie to, čo väčšina ľudí zamýšľa, keď to píšu.

Triedy postáv

Skratky sú len ASCII, pokiaľ nepridáte príznak u a nepoužijete escape vlastnosti Unicode.

SyntaxVýznamPríklad
.Akýkoľvek znak okrem zalomenia riadkuPridajte príznak s, aby sa zhodoval aj s novými riadkami./a.c/"abc" → "abc"
\dČíslica, 0–9/\d+/"order 42" → "42"
\DČokoľvek, čo nie je číslica/\D+/"42abc" → "abc"
\wPísmeno, číslica alebo podčiarkovníkIba ASCII — „é“ nie je \w./\w+/"user_1!" → "user_1"
\WČokoľvek \w sa nezhoduje/\W+/"a++b" → "++"
\sAkékoľvek medzery vrátane tabulátorov a nových riadkov/\s+/"a \t b" → " \t "
\SAkýkoľvek znak bez medzery/\S+/" hi" → "hi"
[abc]Ktorýkoľvek z uvedených znakov/[aeiou]/"rhythm and" → "a"
[^abc]Akýkoľvek znak okrem uvedených/[^aeiou ]+/"aeiou xyz" → "xyz"
[a-z]Rozsah postáv/[a-f]+/"zzabcz" → "abc"
\p{L}Akékoľvek písmeno Unicode (vyžaduje príznak u)/\p{L}+/"42 café" → "café"

Kvantifikátory

Všetky tieto sú štandardne nenásytné: berú si toľko, koľko môžu, a vracajú späť len vtedy, ak zvyšok vzoru zlyhá.

SyntaxVýznamPríklad
*Nula alebo viac/ab*/"a" → "a"
+Jeden alebo viac/ab+/"abbb" → "abbb"
?Nula alebo jedna – robí to voliteľné/colou?r/"color" → "color"
{3}Presne tri/\d{3}/"id 12345" → "123"
{2,}Dva alebo viac/a{2,}/"aaa" → "aaa"
{2,4}Medzi dvoma a štyrmi/a{2,4}/"aaaaa" → "aaaa"
*?Lenivý — berie čo najmenejNenásytný <.+> by zhltol obe značky./<.+?>/"<a><b>" → "<a>"

Kotvy a hranice

Tieto zodpovedajú pozícii, nie charakteru, takže nič nespotrebúvajú.

SyntaxVýznamPríklad
^Začiatok reťazca alebo riadku s príznakom m/^a/"abc" → "a"
$Koniec reťazca alebo riadku s príznakom m/c$/"abc" → "c"
\bHranica slovaTo je to, čo zastaví zhodu „mačky“ vo vnútri „zreťazenia“./\bcat\b/"the cat sat" → "cat"
\BBez slovnej hranice/\Bcat/"concatenate" → "cat"

Skupiny a striedanie

SyntaxVýznamPríklad
(abc)Zachytávacia skupina – zapamätaná na nahradenie/(\d+)-(\d+)/"10-20" → "10-20"
(?:abc)Zoskupovanie bez snímaniaPoužite to, keď potrebujete iba zoskupenie; udržiava zmysluplné čísla./(?:ab)+/"abab" → "abab"
(?<name>…)Pomenovaná zachytávacia skupina/(?<year>\d{4})/"in 2026" → "2026"
a|bObe strany — striedanieStriedanie má najnižšiu prioritu: ^a|b$ je "^a" alebo "b$", nie "^(a|b)$"./cat|dog/"one dog" → "dog"
\1Spätný odkaz na prvú skupinu/(\w)\1/"letter" → "tt"

Rozhliadnite sa

Tvrdenia o tom, čo obklopuje pozíciu. Samy o sebe sa k ničomu nehodia, a preto je ich kombinácia bezpečná.

SyntaxVýznamPríklad
(?=…)Lookahead — nasleduje toto/\d+(?= kg)/"80 kg" → "80"
(?!…)Negatívny výhľad – toto nenasleduje/\d+(?! kg)/"80 lb" → "80"
(?<=…)Lookbehind — tomu predchádzalo/(?<=\$)\d+/"costs $40" → "40"
(?<!…)Negatívny pohľad za sebou — tomu nepredchádza/(?<!\$)\b\d+/"about 40" → "40"

Útek

Týchto dvanásť znakov je tých, ktoré potrebujú spätné lomítko, aby sme ich brali doslovne.

SyntaxVýznamPríklad
\.Doslova bodka/\d\.\d/"v2.5" → "2.5"
\\Doslovné spätné lomítko/\\/"C:\\dir" → "\\"
\nRiadkový posuv/a\nb/"a\nb" → "a\nb"
\tKarta/a\tb/"a\tb" → "a\tb"
\uFFFFZnak podľa bodu kódu/\u00e9/"café" → "é"

Vlajky

VlajkaMenoVýznam
gglobálneNájdite každý zápas, nielen prvý.
iIgnorovať malé a veľké písmenáZhoda bez ohľadu na veľké alebo malé písmená.
mViacriadkovýZhoduje sa ^ a $ pri každom zalomení riadku, nie iba na koncoch reťazca.
sBodka všetkoPoďme . zápasové prestávky tiež.
uUnicodeZaobchádza so vzorom ako s kódovými bodmi a povolí \p{…} vlastnosti escape.
yLepkavýZhoduje sa len s presne lastIndex, nikdy nehľadá dopredu.

Časté otázky

Aký je rozdiel medzi chamtivými a lenivými kvantifikátormi?
Nenásytné kvantifikátory (*, +, {2,}) sa čo najviac zhodujú a znaky vrátia len vtedy, keď sa zvyšok vzoru nezhoduje. Pridanie ? robí ich lenivými: zhodujú sa čo najmenej a berú viac, len keď sú nútení. Na "<a><b>" vzor <.+> vráti celý reťazec a <.+?> vráti iba <a>.
Prečo sa moje slovo zhoduje s inými slovami?
Pretože to nič neukotvilo. Zabaľte slovo do \b — /\bcat\b/ sa zhoduje s výrazom „mačka“ s výrazom „mačka sedela“, ale nie vo vnútri výrazu „zreťaziť“. \b zodpovedá pozícii medzi slovným znakom a neslovným znakom, takže nespotrebováva nič.
Čo mení vlajka u?
Spôsobuje to, že vzor funguje na kódových bodoch a nie na jednotkách UTF-16, takže jeden emoji sa počíta ako jeden znak a umožňuje úniky vlastností \p{…}, ako napríklad \p{L} pre „akékoľvek písmeno“. Bez neho zostanú \w a \d iba ASCII, čo je dôvod, prečo „kaviareň“ úplne nezodpovedá /\w+/.
Kedy by som mal použiť skupinu bez zachytávania?
Kedykoľvek potrebujete zoskupenie, ale nie zachytený text — (?:ab)+ namiesto (ab)+. Zachytenia stoja málo výkonu, ale skutočným dôvodom je číslovanie: každá skupina zachytávania, ktorú pridáte, posunie čísla tých po sebe, čím sa potichu prerušia náhrady, ktoré používajú 1 dolár a 2 doláre.
Je používanie lookbehind bezpečné?
V súčasných prehliadačoch a Node áno — (?<=…) a (?<!…) sú podporované vo všetkých hlavných motoroch od roku 2018. Safari bol posledný, ktorý to pridal. Ak zacieľujete na veľmi staré runtime, najprv skontrolujte; pre syntax regulárneho výrazu neexistuje polyfill.