Preskoči na sadržaj
TextArray

Regex varalica

Regularni izrazi dovoljno su kompaktni da je sintaksu lakše pronaći nego zapamtiti. Ova stranica je sve na jednom zaslonu — klase, kvantifikatori, sidra, grupe, razgledavanje, bježanje i zastavice — s radnim primjerom za svaki red.

Okus je JavaScript, što je ono što se izvodi u vašem pregledniku i što koristi tester regularnih izraza na ovoj stranici. Većina je identična u Pythonu, Javi, Gou i PCRE-u; gdje se okusi razlikuju, razlikuju se na rubovima — podrška za gledanje unazad, sintaksa imenovane grupe i znači li \d "ASCII znamenka" ili "bilo koja Unicode znamenka".

Dvije su stvari odgovorne za većinu iznenađenja. Kvantifikatori su pohlepni: uzimaju sve što mogu i vraćaju samo kada ostatak uzorka zakaže, zbog čega <.+> guta dvije oznake, a <.+?> ne. A alternacija povezuje najlabavije od svega, tako da ^a|b$ znači "počinje s a ili završava s b" — a ne ono što većina ljudi namjerava kada piše.

Klase znakova

Skraćenice su samo za ASCII osim ako ne dodate zastavu u i ne koristite izlaze svojstava Unicode.

SintaksaZnačenjePrimjer
.Bilo koji znak osim prijeloma retkaDodajte zastavicu s da bi odgovarala i novim redovima./a.c/"abc" → "abc"
\dZnamenka, 0–9/\d+/"order 42" → "42"
\DSve što nije znamenka/\D+/"42abc" → "abc"
\wSlovo, znamenka ili podvlakaSamo ASCII — "é" nije \w./\w+/"user_1!" → "user_1"
\WNišta \w ne odgovara/\W+/"a++b" → "++"
\sSvaki razmak, uključujući kartice i nove retke/\s+/"a \t b" → " \t "
\SBilo koji znak koji nije razmak/\S+/" hi" → "hi"
[abc]Bilo koji od navedenih znakova/[aeiou]/"rhythm and" → "a"
[^abc]Bilo koji lik osim navedenih/[^aeiou ]+/"aeiou xyz" → "xyz"
[a-z]Raspon znakova/[a-f]+/"zzabcz" → "abc"
\p{L}Bilo koje Unicode slovo (potrebna je zastavica u)/\p{L}+/"42 café" → "café"

Kvantifikatori

Svi su ovi standardno pohlepni: uzimaju koliko god mogu i vraćaju samo ako ostatak obrasca ne uspije.

SintaksaZnačenjePrimjer
*Nula ili više/ab*/"a" → "a"
+Jedan ili više/ab+/"abbb" → "abbb"
?Nula ili jedan — čini ga izbornim/colou?r/"color" → "color"
{3}Točno tri/\d{3}/"id 12345" → "123"
{2,}Dva ili više/a{2,}/"aaa" → "aaa"
{2,4}Između dva i četiri/a{2,4}/"aaaaa" → "aaaa"
*?Lijen — uzima što je moguće manjePohlepni <.+> bi progutao obje oznake./<.+?>/"<a><b>" → "<a>"

Sidra i granice

Oni odgovaraju položaju, a ne karakteru, tako da ne konzumiraju ništa.

SintaksaZnačenjePrimjer
^Početak niza ili retka s oznakom m/^a/"abc" → "a"
$Kraj niza ili retka s oznakom m/c$/"abc" → "c"
\bGranica riječiTo je ono što zaustavlja "cat" podudaranje unutar "concatenate"./\bcat\b/"the cat sat" → "cat"
\BNema granice riječi/\Bcat/"concatenate" → "cat"

Grupe i alternacija

SintaksaZnačenjePrimjer
(abc)Grupa za hvatanje — zapamćena za zamjenu/(\d+)-(\d+)/"10-20" → "10-20"
(?:abc)Grupiranje bez hvatanjaKoristite ovo kada trebate samo grupiranje; održava značajne brojeve snimanja./(?:ab)+/"abab" → "abab"
(?<name>…)Imenovana grupa za hvatanje/(?<year>\d{4})/"in 2026" → "2026"
a|bObje strane — izmjenaAlternacija ima najniži prioritet: ^a|b$ je "^a" ili "b$", a ne "^(a|b)$"./cat|dog/"one dog" → "dog"
\1Povratna referenca na prvu grupu/(\w)\1/"letter" → "tt"

Pogled okolo

Tvrdnje o tome što okružuje poziciju. Sami se ne slažu s ničim, što ih čini sigurnima za kombiniranje.

SintaksaZnačenjePrimjer
(?=…)Lookahead — nakon čega slijedi ovo/\d+(?= kg)/"80 kg" → "80"
(?!…)Negativno gledanje unaprijed — ne slijedi ovo/\d+(?! kg)/"80 lb" → "80"
(?<=…)Lookbehind — prethodi ovome/(?<=\$)\d+/"costs $40" → "40"
(?<!…)Negativno gledanje unazad — ovome ne prethodi/(?<!\$)\b\d+/"about 40" → "40"

bježanje

Ovih dvanaest znakova su oni koji trebaju obrnutu kosu crtu da bi se shvatili doslovno.

SintaksaZnačenjePrimjer
\.Doslovna točka/\d\.\d/"v2.5" → "2.5"
\\Doslovna kosa crta unazad/\\/"C:\\dir" → "\\"
\nPokretanje retka/a\nb/"a\nb" → "a\nb"
\tKartica/a\tb/"a\tb" → "a\tb"
\uFFFFZnak prema svojoj kodnoj točki/\u00e9/"café" → "é"

Zastave

ZastavaImeZnačenje
gGlobalnoPronađite svako podudaranje, ne samo prvo.
iZanemari velika i mala slovaPodudaranje bez obzira na velika ili mala slova.
mVišelinijskiČini ^ i $ podudaranjem pri svakom prijelomu retka umjesto samo na krajevima niza.
sTočka sveNeka . prekidi reda također.
uUnicodeTretira uzorak kao točke koda i omogućuje izlaz svojstva \p{…}.
yljepljivPodudara se samo s točno zadnjim indeksom, nikad ne pretražuje unaprijed.

FAQ

Koja je razlika između pohlepnih i lijenih kvantifikatora?
Pohlepni kvantifikatori (*, +, {2,}) podudaraju se što je više moguće i vraćaju znakove samo kada se ostatak uzorka ne može podudarati. Dodavanje ? čini ih lijenima: podudaraju se što je moguće manje i uzimaju više samo kad su prisiljeni. Na "<a><b>", uzorak <.+> vraća cijeli niz, a <.+?> vraća samo <a>.
Zašto se moja riječ podudara s drugim riječima?
Jer ništa ga nije usidrilo. Zamotajte riječ u \b — /\bcat\b/ odgovara "cat" u "the cat sat", ali ne unutar "concatenate". \b odgovara poziciji između znaka riječi i znaka koji nije riječ, tako da ne troši ništa.
Što mijenja zastava u?
Omogućuje da uzorak radi na točkama koda, a ne na jedinicama UTF-16, tako da se jedan emoji računa kao jedan znak i omogućuje izlaze svojstva \p{…} kao što je \p{L} za "bilo koje slovo". Bez njega, \w i \d ostaju samo ASCII, zbog čega "café" ne odgovara u potpunosti /\w+/.
Kada trebam koristiti grupu bez snimanja?
Kad god trebate grupiranje, ali ne i snimljeni tekst — (?:ab)+ umjesto (ab)+. Hvatanja koštaju malo performansi, ali pravi razlog je numeriranje: svaka grupa za hvatanje koju dodate pomiče brojeve onih nakon nje, tiho prekidajući zamjene koje koriste $1 i $2.
Je li lookbehind siguran za korištenje?
U trenutnim preglednicima i Nodeu, da — (?<=…) i (?<!…) podržani su na svim većim motorima od 2018. Safari je bio posljednji koji ga je dodao. Ako ciljate na vrlo stara vremena izvođenja, prvo provjerite; ne postoji polifill za sintaksu regularnog izraza.