Reguljara uttryck har rykte om sig att se ut som slumpmassigt brus. Ett monster som ^[\w.-]+@[\w-]+\.\w{2,}$ kan kanna som om en katt gatt over tangentbordet. Men bakom den kryptiska syntaxen doljer sig en anmarkningsvart elegant ide: ett koncist sprak for att beskriva monster i text.
Oavsett om du validerar formularindata, soker i loggfiler, rensar data eller gor sok-och-ersatt over en kodbas ar regex ett av de mest mangssidiga verktygen i en utvecklares verktygslada. Och du behover inte memorera varje obskyr funktion for att fa riktigt nytta av det. En handfull byggstenar tacker den stora majoriteten av praktiska anvandningsfall.
Vad regex faktiskt gor
Ett reguljart uttryck (regex eller regexp) ar ett monster som beskriver en mangd strangar. Du ger det till en sokmotor -- i ditt programmeringssprak, din textredigerare eller ditt kommandoradsverktyg -- och den hittar varje strang som matchar.
Tank pa det som en uppgraderad sokfraga:
- Vanlig sokning: hitta det exakta ordet "error"
- Regex-sokning: hitta allt som ser ut som en IP-adress, ett datum, en e-postadress eller vilken struktur du an kan beskriva
Regex uppfanns av matematikern Stephen Kleene 1956 och kom in i datavetenskapen genom Unix-textredigerare pa 1960-talet. Idag stods det i praktiskt taget alla programmeringssprak och textredigerare.
Byggstenarna
Bokstavliga tecken
Det enklaste regexet ar ren text. Monstret hello matchar strangen "hello" varhelst den forekommar. Inget markvardigt.
Punkten (.) -- valfritt tecken
En punkt matchar valfritt enskilt tecken utom en radbrytning.
h.tmatchar "hat", "hit", "hot", "h3t" och till och med "h t"
Teckenklasser ([])
Hakparenteser definierar en uppsattning tillatna tecken pa en position.
[aeiou]-- valfri vokal[0-9]-- valfri siffra[A-Za-z]-- valfri bokstav[^0-9]-- valfritt tecken som INTE ar en siffra (^inuti hakparenteser betyder "inte")
Stenografiklasser
| Stenografi | Betydelse | Motsvarighet |
|---|---|---|
\d |
Valfri siffra | [0-9] |
\w |
Ordtecken | [A-Za-z0-9_] |
\s |
Blanksteg | [ \t\n\r] |
\D |
Inte en siffra | [^0-9] |
\W |
Inte ett ordtecken | [^A-Za-z0-9_] |
\S |
Inte blanksteg | [^ \t\n\r] |
Kvantifierare -- hur manga
Kvantifierare styr hur manga ganger det foregaende elementet maste forekomma.
| Symbol | Betydelse | Exempel | Matchar |
|---|---|---|---|
* |
Noll eller fler | ab*c |
"ac", "abc", "abbc" |
+ |
En eller fler | ab+c |
"abc", "abbc" (inte "ac") |
? |
Noll eller en | colou?r |
"color" och "colour" |
{3} |
Exakt 3 | \d{3} |
"123", "456" |
{2,4} |
Mellan 2 och 4 | \d{2,4} |
"12", "123", "1234" |
Ankare -- position
^-- borjan av strangen (eller raden, med flagganm)$-- slutet av strangen (eller raden)\b-- ordgrans
Monstret ^\d{4}$ matchar en strang som ar exakt fyra siffror, som "2026", men inte "abc2026" eller "2026xyz".
Grupper och alternering
(abc)-- fangar "abc" som en gruppa|b-- matchar "a" eller "b"(cat|dog)-- matchar "cat" eller "dog"
Grupper later dig ocksa tillampa kvantifierare pa sekvenser: (ha)+ matchar "ha", "haha", "hahaha".
Vanliga praktiska monster
Validera en e-postadress (grundlaggande)
^[\w.-]+@[\w-]+\.\w{2,}$
Detta matchar user@example.com, first.last@company.co.uk (delvis), och avvisar strangar utan ett @ eller doman.
Viktigt: Att perfekt validera e-postadresser med regex ar notoriskt svart -- den fullstandiga RFC 5322-specifikationen ar extremt komplex. For produktionssystem, anvand ett grundlaggande regex for formatkontroll och verifiera sedan adressen genom att skicka ett bekraftelsemail.
Matcha ett telefonnummer
\+?\d{1,3}[-.\s]?\(?\d{1,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4}
Detta hanterar format som +1 555 123 4567, 555-123-4567 och (555) 123-4567.
Matcha en URL
https?://[\w.-]+(/[\w./?&=-]*)?
Matchar https://example.com, http://example.com/path?q=hello.
Matcha ett datum (YYYY-MM-DD)
\d{4}-\d{2}-\d{2}
Matchar 2026-03-29, 1999-12-31. Observera: detta kontrollerar bara format, inte giltighet -- det skulle ocksa matcha 9999-99-99.
Flaggor som andrar beteende
De flesta regex-motorer stoder flaggor som modifierar hur monstret tillampas:
| Flagga | Namn | Effekt |
|---|---|---|
g |
Global | Hitta alla matchningar, inte bara den forsta |
i |
Skiftlageskanslig | hello matchar "Hello", "HELLO", etc. |
m |
Flerradig | ^ och $ matchar borjan/slutet av varje rad |
s |
Dotall | . matchar aven radbrytningar |
I JavaScript laggs flaggor till efter det avslutande snedstrecket: /hello/gi. I Python skickas de som argument: re.findall(r"hello", text, re.IGNORECASE).
Nar regex ar overkill
Regex ar kraftfullt, men det ar inte alltid ratt verktyg:
- Parsning av HTML eller XML. Anvand en riktig DOM-parser. Regex kan inte palitligt hantera nastlade taggar.
- Parsning av JSON. Anvand
JSON.parse()eller motsvarande. Regex bryter pa specialfall. - Komplex validering. Om ditt monster stracker sig over flera rader och tar fem minuter att lasa, overvag att skriva procedurell valideringskod istallet.
- Enkla strangoperationer. Om du bara behover
startsWith(),includes()ellersplit()ar vanliga strangmetoder tydligare och snabbare.
Vanliga fallgropar
- Glomma att escapa specialtecken. Punkten
.matchar valfritt tecken. For att matcha en bokstavlig punkt, anvand\.. Samma sak galler for(,),[,],+,*,?,{,},^,$,|och\. - Girigt vs. lat matchning. Som standard ar
.*girigt -- det matchar sa mycket som mojligt. Lagg till?for att gora det lat:.*?matchar sa lite som mojligt. Detta spelar roll nar du extraherar innehall mellan avgransare. - Katastrofal backtracking. Nastlade kvantifierare som
(a+)+kan fa motorn att prova ett exponentiellt antal vagar pa viss indata, vilket fryser ditt program. Undvik nastlad upprepning pa overlappande monster. - Glomma ankare. Utan
^och$matchar ditt monster delstrangar.\d{3}matchar "123" inuti "abc12345". Anvand^\d{3}$om du behover en exakt matchning.
Mer lasning
Det basta sattet att lara sig regex ar att experimentera. Skriv ett monster, klistra in lite testtext och se vad som lyser upp. Justera och iterera tills du forstar hur varje del fungerar.
- Hur du testar regex-monster -- interaktiv tutorial med exempel
- Regex-testare -- klistra in ditt monster och testdata, se matchningar markerade i realtid
