Pregled regularnih izrazov
Regularni izrazi so dovolj strnjeni, da je sintakso lažje poiskati kot si jo zapomniti. Ta stran je vsa na enem zaslonu — razredi, kvantifikatorji, sidra, skupine, lookaround, escapiranje in zastavice — z delujočim primerom za vsako vrstico.
Različica je JavaScript, kar teče v vašem brskalniku in kar uporablja preizkuševalnik regularnih izrazov na tem mestu. Večina je enaka v Pythonu, Javi, Go in PCRE; kjer se različice razhajajo, se razhajajo na robovih — podpora za lookbehind, sintaksa poimenovanih skupin in ali \d pomeni »števko ASCII« ali »katero koli števko Unicode«.
Dve stvari sta kriva za večino presenečenj. Kvantifikatorji so požrešni: vzamejo vse, kar lahko, in vračajo šele, ko preostanek vzorca ne uspe, zato <.+> pogoltne dve oznaki, <.+?> pa ne. In alternacija veže najšibkeje od vsega, tako da ^a|b$ pomeni »se začne z a ali se konča z b« — ne tisto, kar večina ljudi namerava, ko to napiše.
Znakovni razredi
11Okrajšave delujejo le v ASCII, razen če dodate zastavico u in uporabite lastnostna ubežna zaporedja Unicode.
| Sintaksa | Pomen | Primer |
|---|---|---|
| . | Kateri koli znak razen preloma vrsticeDodajte zastavico s, da se ujema tudi z novimi vrsticami. | /a.c/"abc" → "abc" |
| \d | Števka, 0–9 | /\d+/"order 42" → "42" |
| \D | Karkoli, kar ni števka | /\D+/"42abc" → "abc" |
| \w | Črka, števka ali podčrtajSamo ASCII — »é« ni \w. | /\w+/"user_1!" → "user_1" |
| \W | Karkoli, s čimer se \w ne ujema | /\W+/"a++b" → "++" |
| \s | Kateri koli presledni znak, vključno s tabulatorji in novimi vrsticami | /\s+/"a \t b" → " \t " |
| \S | Kateri koli nepresledni znak | /\S+/" hi" → "hi" |
| [abc] | Kateri koli od naštetih znakov | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Kateri koli znak razen naštetih | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Obseg znakov | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Katera koli črka Unicode (potrebuje zastavico u) | /\p{L}+/"42 café" → "café" |
Kvantifikatorji
7Vsi ti so privzeto požrešni: vzamejo čim več in vračajo le, če preostanek vzorca ne uspe.
| Sintaksa | Pomen | Primer |
|---|---|---|
| * | Nič ali več | /ab*/"a" → "a" |
| + | Eden ali več | /ab+/"abbb" → "abbb" |
| ? | Nič ali eden — naredi izbirno | /colou?r/"color" → "color" |
| {3} | Natanko trije | /\d{3}/"id 12345" → "123" |
| {2,} | Dva ali več | /a{2,}/"aaa" → "aaa" |
| {2,4} | Med dva in štiri | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Leno — vzame čim manjPožrešni <.+> bi pogoltnil obe oznaki. | /<.+?>/"<a><b>" → "<a>" |
Sidra in meje
4Ti se ujemajo s položajem, ne z znakom, zato ne porabijo ničesar.
| Sintaksa | Pomen | Primer |
|---|---|---|
| ^ | Začetek niza ali vrstice z zastavico m | /^a/"abc" → "a" |
| $ | Konec niza ali vrstice z zastavico m | /c$/"abc" → "c" |
| \b | Besedna mejaTo je tisto, kar prepreči, da bi se »cat« ujemal znotraj »concatenate«. | /\bcat\b/"the cat sat" → "cat" |
| \B | Ni besedna meja | /\Bcat/"concatenate" → "cat" |
Skupine in alternacija
5| Sintaksa | Pomen | Primer |
|---|---|---|
| (abc) | Zajemalna skupina — zapomnjena za zamenjavo | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Združevanje brez zajemanjaUporabite to, kadar potrebujete le združevanje; ohranja smiselnost številk zajemov. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Poimenovana zajemalna skupina | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Ena ali druga stran — alternacijaAlternacija ima najnižjo prednost: ^a|b$ je »^a« ali »b$«, ne »^(a|b)$«. | /cat|dog/"one dog" → "dog" |
| \1 | Povratni sklic na prvo skupino | /(\w)\1/"letter" → "tt" |
Lookaround
4Trditve o tem, kaj obdaja položaj. Same se ne ujemajo z ničimer, zato jih je varno kombinirati.
| Sintaksa | Pomen | Primer |
|---|---|---|
| (?=…) | Lookahead — sledi mu to | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Negativni lookahead — ne sledi mu to | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — pred njim je to | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Negativni lookbehind — pred njim ni tega | /(?<!\$)\b\d+/"about 40" → "40" |
Escapiranje
5Teh dvanajst znakov potrebuje obrnjeno poševnico, da so vzeti dobesedno.
| Sintaksa | Pomen | Primer |
|---|---|---|
| \. | Dobesedna pika | /\d\.\d/"v2.5" → "2.5" |
| \\ | Dobesedna obrnjena poševnica | /\\/"C:\\dir" → "\\" |
| \n | Pomik v novo vrstico | /a\nb/"a\nb" → "a\nb" |
| \t | Tabulator | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Znak po njegovi kodni točki | /\u00e9/"café" → "é" |
Zastavice
6| Zastavica | Ime | Pomen |
|---|---|---|
| g | Globalno | Poišče vsako ujemanje, ne le prvega. |
| i | Prezri velikost črk | Ujema se ne glede na velike ali male črke. |
| m | Večvrstično | Naredi, da se ^ in $ ujemata ob vsakem prelomu vrstice namesto le na koncih niza. |
| s | DotAll | Omogoči, da se . ujema tudi s prelomi vrstic. |
| u | Unicode | Obravnava vzorec kot kodne točke in omogoči lastnostna ubežna zaporedja \p{…}. |
| y | Lepljivo | Ujema se le natanko pri lastIndex, nikoli ne išče naprej. |