Hoppa till innehåll

Regex-lathund

Reguljära uttryck är kompakta nog att syntaxen är lättare att slå upp än att memorera. Denna sida är alltihop på en skärm — klasser, kvantifierare, ankare, grupper, lookaround, escaping och flaggorna — med ett fungerande exempel för varje rad.

Varianten är JavaScript, vilket är det som körs i din webbläsare och det som regex-testaren på den här webbplatsen använder. Det mesta är identiskt i Python, Java, Go och PCRE; där varianter skiljer sig åt, skiljer de sig i utkanterna — stöd för lookbehind, syntax för namngivna grupper, och huruvida \d betyder "ASCII-siffra" eller "vilken Unicode-siffra som helst".

Två saker står för de flesta överraskningarna. Kvantifierare är giriga: de tar allt de kan och lämnar tillbaka bara när resten av mönstret misslyckas, vilket är varför <.+> slukar två taggar och <.+?> inte gör det. Och alternering binder lösast av allt, så ^a|b$ betyder "börjar med a, eller slutar med b" — inte vad de flesta avser när de skriver det.

Teckenklasser

11

Kortformerna är enbart ASCII om du inte lägger till u-flaggan och använder Unicode-egenskapsescapes.

SyntaxBetydelseExempel
.Vilket tecken som helst utom en radbrytningLägg till s-flaggan för att få det att matcha radbrytningar också./a.c/"abc" "abc"
\dEn siffra, 0–9/\d+/"order 42" "42"
\DAllt som inte är en siffra/\D+/"42abc" "abc"
\wBokstav, siffra eller understreckEndast ASCII — "é" är inte \w./\w+/"user_1!" "user_1"
\WAllt som \w inte matchar/\W+/"a++b" "++"
\sVilket blanktecken som helst, inklusive tabbar och radbrytningar/\s+/"a \t b" " \t "
\SVilket icke-blanktecken som helst/\S+/" hi" "hi"
[abc]Något av de listade tecknen/[aeiou]/"rhythm and" "a"
[^abc]Vilket tecken som helst utom de listade/[^aeiou ]+/"aeiou xyz" "xyz"
[a-z]Ett intervall av tecken/[a-f]+/"zzabcz" "abc"
\p{L}Vilken Unicode-bokstav som helst (kräver u-flaggan)/\p{L}+/"42 café" "café"

Kvantifierare

7

Alla dessa är giriga som standard: de tar så mycket de kan och lämnar tillbaka bara om resten av mönstret misslyckas.

SyntaxBetydelseExempel
*Noll eller fler/ab*/"a" "a"
+En eller fler/ab+/"abbb" "abbb"
?Noll eller en — gör det valfritt/colou?r/"color" "color"
{3}Exakt tre/\d{3}/"id 12345" "123"
{2,}Två eller fler/a{2,}/"aaa" "aaa"
{2,4}Mellan två och fyra/a{2,4}/"aaaaa" "aaaa"
*?Lat — tar så lite som möjligtDen giriga <.+> skulle sluka båda taggarna./<.+?>/"<a><b>" "<a>"

Ankare och gränser

4

Dessa matchar en position, inte ett tecken, så de förbrukar ingenting.

SyntaxBetydelseExempel
^Början av strängen, eller av en rad med m-flaggan/^a/"abc" "a"
$Slutet av strängen, eller av en rad med m-flaggan/c$/"abc" "c"
\bEn ordgränsDet är detta som hindrar "cat" från att matcha inuti "concatenate"./\bcat\b/"the cat sat" "cat"
\BInte en ordgräns/\Bcat/"concatenate" "cat"

Grupper och alternering

5
SyntaxBetydelseExempel
(abc)Fångande grupp — ihågkommen för ersättning/(\d+)-(\d+)/"10-20" "10-20"
(?:abc)Gruppering utan fångstAnvänd detta när du bara behöver grupperingen; det håller fångstnumren meningsfulla./(?:ab)+/"abab" "abab"
(?<name>…)Namngiven fångande grupp/(?<year>\d{4})/"in 2026" "2026"
a|bEndera sidan — alterneringAlternering har lägst prioritet: ^a|b$ är "^a" eller "b$", inte "^(a|b)$"./cat|dog/"one dog" "dog"
\1Bakåtreferens till den första gruppen/(\w)\1/"letter" "tt"

Lookaround

4

Påståenden om vad som omger en position. De matchar ingenting själva, vilket är det som gör dem säkra att kombinera.

SyntaxBetydelseExempel
(?=…)Lookahead — följt av detta/\d+(?= kg)/"80 kg" "80"
(?!…)Negativ lookahead — inte följt av detta/\d+(?! kg)/"80 lb" "80"
(?<=…)Lookbehind — föregånget av detta/(?<=\$)\d+/"costs $40" "40"
(?<!…)Negativ lookbehind — inte föregånget av detta/(?<!\$)\b\d+/"about 40" "40"

Escaping

5

Dessa tolv tecken är de som behöver ett omvänt snedstreck för att tolkas bokstavligt.

SyntaxBetydelseExempel
\.En bokstavlig punkt/\d\.\d/"v2.5" "2.5"
\\Ett bokstavligt omvänt snedstreck/\\/"C:\\dir" "\\"
\nEn radmatning/a\nb/"a\nb" "a\nb"
\tEn tabb/a\tb/"a\tb" "a\tb"
\uFFFFEtt tecken via dess kodpunkt/\u00e9/"café" "é"

Flaggor

6
FlaggaNamnBetydelse
gGlobalHitta varje matchning, inte bara den första.
iIgnorera skiftlägeMatcha oavsett stora eller små bokstäver.
mFlerradigFår ^ och $ att matcha vid varje radbrytning i stället för bara vid strängens ändar.
sDot allLåter . matcha radbrytningar också.
uUnicodeBehandlar mönstret som kodpunkter och aktiverar \p{…}-egenskapsescapes.
yStickyMatchar endast exakt vid lastIndex, söker aldrig framåt.

FAQ

Vad är skillnaden mellan giriga och lata kvantifierare?
Giriga kvantifierare (*, +, {2,}) matchar så mycket som möjligt och lämnar tillbaka tecken bara när resten av mönstret inte kan matcha. Att lägga till ? gör dem lata: de matchar så lite som möjligt och tar mer bara när de tvingas. På "<a><b>" returnerar mönstret <.+> hela strängen och <.+?> returnerar bara <a>.
Varför matchar mitt ord inuti andra ord?
Eftersom inget förankrade det. Omslut ordet med \b — /\bcat\b/ matchar "cat" i "the cat sat" men inte inuti "concatenate". \b matchar en position mellan ett ordtecken och ett icke-ordtecken, så det förbrukar ingenting.
Vad ändrar u-flaggan?
Den får mönstret att arbeta på kodpunkter i stället för UTF-16-enheter, så att en enda emoji räknas som ett tecken, och den aktiverar \p{…}-egenskapsescapes som \p{L} för "vilken bokstav som helst". Utan den förblir \w och \d enbart ASCII, vilket är varför "café" inte matchar /\w+/ fullständigt.
När ska jag använda en icke-fångande grupp?
När du behöver grupperingen men inte den fångade texten — (?:ab)+ i stället för (ab)+. Fångster kostar lite prestanda, men det verkliga skälet är numreringen: varje fångande grupp du lägger till förskjuter numren på dem som kommer efter, och bryter tyst ersättningar som använder $1 och $2.
Är lookbehind säkert att använda?
I aktuella webbläsare och Node, ja — (?<=…) och (?<!…) har stötts i varje större motor sedan 2018. Safari var sist med att lägga till det. Om du riktar in dig på mycket gamla körmiljöer, kontrollera först; det finns ingen polyfill för regex-syntax.