Hoppa till innehåll
TextArray

Regex fuskblad

Reguljära uttryck är tillräckligt kompakta för att syntaxen är lättare att slå upp än att memorera. Den här sidan är allt på en skärm – klasser, kvantifierare, ankare, grupper, lookaround, escape och flaggorna – med ett fungerande exempel för varje rad.

Smaken är JavaScript, vilket är det som körs i din webbläsare och vad regex-testaren på den här webbplatsen använder. Det mesta är identiskt i Python, Java, Go och PCRE; där smakerna divergerar, divergerar de på kanterna — se efter stöd, syntax för namngivna grupper och om \d betyder "ASCII-siffra" eller "valfri Unicode-siffra".

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

Karaktärsklasser

Stenografierna är endast för ASCII om du inte lägger till u-flaggan och använder Unicode-egenskapsavvikelser.

SyntaxMenandeExempel
.Vilket tecken som helst utom en radbrytningLägg till s-flaggan för att få den att matcha nya rader 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"
\WNågot \w inte matchar/\W+/"a++b" → "++"
\sAlla blanksteg, inklusive flikar och nyrader/\s+/"a \t b" → " \t "
\SAlla tecken som inte är blanksteg/\S+/" hi" → "hi"
[abc]Vilken som helst av de listade karaktärerna/[aeiou]/"rhythm and" → "a"
[^abc]Alla tecken utom de listade/[^aeiou ]+/"aeiou xyz" → "xyz"
[a-z]En rad karaktärer/[a-f]+/"zzabcz" → "abc"
\p{L}Vilken Unicode-bokstav som helst (kräver u-flaggan)/\p{L}+/"42 café" → "café"

Kvantifierare

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

SyntaxMenandeExempel
*Noll eller mer/ab*/"a" → "a"
+En eller flera/ab+/"abbb" → "abbb"
?Noll eller ett — 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"
*?Lata — tar så lite som möjligtDen girige <.+> skulle svälja båda taggarna./<.+?>/"<a><b>" → "<a>"

Ankare och gränser

Dessa matchar en position, inte en karaktär, så de förbrukar ingenting.

SyntaxMenandeExempel
^Början av strängen, eller av en linje med flaggan m/^a/"abc" → "a"
$Slutet på strängen, eller på en linje med flaggan m/c$/"abc" → "c"
\bEn ordgränsDetta är vad som stoppar "katt"-matchning inuti "sammanfoga"./\bcat\b/"the cat sat" → "cat"
\BInte en ordgräns/\Bcat/"concatenate" → "cat"

Grupper och växling

SyntaxMenandeExempel
(abc)Fånga grupp — ihågkommen för ersättning/(\d+)-(\d+)/"10-20" → "10-20"
(?:abc)Gruppering utan att fångaAnvänd detta när du bara behöver grupperingen; det håller fånga siffror meningsfulla./(?:ab)+/"abab" → "abab"
(?<name>…)Namngiven fångstgrupp/(?<year>\d{4})/"in 2026" → "2026"
a|bVardera sidan — växlingAlternering har den lägsta prioritet: ^a|b$ är "^a" eller "b$", inte "^(a|b)$"./cat|dog/"one dog" → "dog"
\1Återreferens till den första gruppen/(\w)\1/"letter" → "tt"

Se dig omkring

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.

SyntaxMenandeExempel
(?=…)Lookahead — följt av detta/\d+(?= kg)/"80 kg" → "80"
(?!…)Negativ framtidsutsikt – följs inte av detta/\d+(?! kg)/"80 lb" → "80"
(?<=…)Lookbehind — föregås av detta/(?<=\$)\d+/"costs $40" → "40"
(?<!…)Negativ lookbehind - inte föregås av detta/(?<!\$)\b\d+/"about 40" → "40"

Flyr

Dessa tolv karaktärer är de som behöver ett snedstreck för att tas bokstavligt.

SyntaxMenandeExempel
\.En bokstavlig prick/\d\.\d/"v2.5" → "2.5"
\\Ett bokstavligt snedstreck/\\/"C:\\dir" → "\\"
\nEn radmatning/a\nb/"a\nb" → "a\nb"
\tEn flik/a\tb/"a\tb" → "a\tb"
\uFFFFEtt tecken efter dess kodpunkt/\u00e9/"café" → "é"

Flaggor

FlaggaNamnMenande
gGlobalHitta varje match, inte bara den första.
iIgnorera skiftlägeMatcha oavsett versaler eller gemener.
mFlerlinjeFår ^ och $ att matcha vid varje radbrytning istället för bara i ändarna av strängen.
sPrick allaLåt oss. match radbrytningar också.
uUnicodeBehandlar mönstret som kodpunkter och aktiverar \p{...}-egenskapsflykt.
yKlibbigMatchar endast vid exakt 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 ger tecken tillbaka endast när resten av mönstret inte kan matcha. Lägger till? gör dem lata: de matchar så lite som möjligt och tar bara mer 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?
För ingenting förankrade det. Slå in ordet i \b — /\bcat\b/ matchar "katt" i "katten satt" men inte inuti "sammanfoga". \b matchar en position mellan ett ordtecken och ett icke-ord, så det förbrukar ingenting.
Vad förändrar u-flaggan?
Det gör att mönstret fungerar på kodpunkter snarare än UTF-16-enheter, så en enstaka emoji räknas som ett tecken, och det möjliggör \p{...}-egenskapsavbrott som \p{L} för "valfri bokstav". Utan den förblir \w och \d ASCII-only, vilket är anledningen till att "café" inte helt matchar /\w+/.
När ska jag använda en icke-fångande grupp?
Närhelst du behöver grupperingen men inte den infångade texten — (?:ab)+ istället för (ab)+. Infångningar kostar lite prestanda, men den verkliga anledningen är numrering: varje fångstgrupp du lägger till flyttar numren på de efter sig, och bryter tyst ersättningar som använder $1 och $2.
Är lookbehind säker att använda?
I nuvarande webbläsare och Node, ja — (?<=…) och (?<!...) har stöds i alla större motorer sedan 2018. Safari var den sista att lägga till den. Om du riktar in dig på mycket gamla körtider, kontrollera först; det finns ingen polyfill för regex-syntax.