Regex-prófari
Sláðu inn mynstur, hakaðu við flöggin sem þú þarft og límdu inn texta: hver samsvörun er auðkennd um leið og þú skrifar og birt í lista með staðsetningu sinni og fangahópum. Mynstrið keyrir á regex-vél vafrans þíns sjálfs í JavaScript, svo niðurstöðurnar eru þær sömu og í kóðanum þínum og textinn fer aldrei úr tækinu þínu.
0 stafir · 0 orð · 0 línur
Samsvaranir eru auðkenndar hér.0 stafir · 0 orð · 0 línur
Keyrir alfarið í þessum vafraflipa. Textinn þinn er aldrei sendur inn eða vistaður.
JavaScript regex-tákn
Dálkurinn með fyrstu samsvörun var búinn til með því að keyra hvert mynstur á texta sínum í JavaScript-vélinni sem bjó til þessa síðu.
| Tákn | Merking | Mynstur | Texti | Fyrsta samsvörun |
|---|---|---|---|---|
\d | Tölustafur 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Bókstafur, tölustafur eða undirstrik (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Autt bil, þar með talin tab og línuskil | /\s+/ | two spaces | |
. | Hvaða stafur sem er nema línuskil (nema með s) | /a.c/ | abc a-c | abc |
^ $ | Upphaf og endir inntaks (eða línu, með m) | /^\w+$/ | single | single |
[abc] | Einn af stöfunum sem eru taldir upp | /[aeiou]/ | rhythm and blues | a |
[^abc] | Hvaða stafur sem er sem er ekki talinn upp | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 eða fleiri, 1 eða fleiri, 0 eða 1 | /colou?r/ | color colour | color |
{n,m} | Milli n og m sinnum | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Handsamandi hópur | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Nefndur handsamandi hópur | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Hópur án handsömunar | /(?:ab)+/ | ababab! | ababab |
a|b | Önnur hvor hliðin | /cat|dog/ | hotdog | dog |
\b | Orðamörk | /\bcat\b/ | concat cat | cat |
(?=…) | Á eftir fylgir (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Ekki á eftir (neikvætt lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Hvaða Unicode-bókstafur sem er (krefst u) | /\p{L}+/u | naïve 東京 | naïve |
Flöggin sex og hverju þau breyta
g (global) finnur allar samsvaranir í stað þess að stoppa við þá fyrstu; án þess inniheldur listinn eina færslu. i hunsar há- og lágstafi. m (multiline) lætur ^ og $ passa við upphaf og lok hverrar línu en ekki aðeins alls textans, sem er það sem þarf fyrir mynstur á borð við bil í enda línu. s (dotAll, bætt við í ES2018) lætur . passa líka við línuskil. u (unicode) meðhöndlar texta sem kóðapunkta, þannig að emoji telst einn stafur, og virkjar eiginleikaraðir á borð við \p{L} fyrir hvaða bókstaf sem er í hvaða letri sem er. y (sticky) passar aðeins nákvæmlega á núverandi stað, en það er hamurinn sem tokenizerar nota. JavaScript hefur einnig d fyrir staðsetningar samsvarana og v fyrir mengjaaðgerðir í stafaflokkum; þetta tól notar aðeins fánana sex hér að ofan.
Undir prófunartextanum sýnir hver samsvörun vísi sinn og hópa. Númeraðir hópar koma úr venjulegum svigum, (?:…) myndar hóp án þess að fanga, og (?<year>\d{4}) býr til nefndan hóp sem birtist undir nafni, eins og ISO-dagsetningardæmið sýnir. Valmyndin Common patterns setur inn prófuð upphafsmynstur fyrir netföng, vefslóðir, IPv4-vistföng, hex-liti, UUID, endurtekin orð og bil í enda línu. Líttu á netfangamynstrið sem skynsemisathugun, ekki staðfestingu: raunveruleg málfræði netfanga er mun frjálslegri og eina raunverulega prófið er að senda skilaboð.
Afturlit (lookbehind) og stjórnlaus bakrakning
Lookaround-segðir prófa hvað umlykur stað án þess að nota það upp. Lookahead, (?=…) og (?!…), hefur alltaf verið hluti af JavaScript; lookbehind, (?<=…) og (?<!…), kom með ES2018 og náði til allra helstu vafra þegar Safari 16.4 innleiddi það árið 2023. Því finnur (?<=\$)\d+ töluna 42 í "$42" án dollaramerkisins. Ólíkt mörgum öðrum vélum leyfir JavaScript lookbehind af hvaða lengd sem er.
JavaScript-vélin notar afturhvarf (backtracking): þegar leið mistekst fer hún til baka og prófar aðra möguleika. Hreiðraðir stuðlar eins og (a+)+$ gefa henni veldisfjölda leiða til að skipta sama textanum, þannig að strengur með 30 a-stöfum og x á eftir getur tekið sekúndur og nokkrir stafir í viðbót klukkustundir. Þetta er stórfellt afturhvarf (catastrophic backtracking) og á netþjónum verður það að ReDoS, þjónustuneitunarárás; ein WAF-regla með þennan galla felldi net Cloudflare í um hálftíma 2. júlí 2019. Þar sem þetta tól keyrir í flipanum þínum getur slíkt mynstur fryst síðuna; endurhlaðaðu og endurskrifaðu það þannig að engir tveir stuðlar geti gert tilkall til sömu stafa, notaðu þrengri flokka eins og [^,]* í stað .*, eða akkeri. Til að breyta textanum sjálfum frekar en að finna samsvaranir, sjá textatól; fleiri tól fyrir forritara eru á síðunni forritaratól.
Algengar spurningar
- Af hverju finnur reglulega segðin mín aðeins eina samsvörun?
- Fáninn g er slökktur. Án hans stoppar vélin eftir fyrstu samsvörun. Hakaðu við g til að sjá allar samsvaranir; fáninn y einn og sér finnur líka fleiri, en aðeins þegar þær koma beint hver á eftir annarri.
- Samsvarar \d tölustöfum úr öðrum letrum í JavaScript?
- Nei. Í JavaScript þýðir \d aðeins 0 til 9 og \w aðeins ASCII-bókstafi, tölustafi og undirstrik, jafnvel með fánanum u. Notaðu \p{Nd} eða \p{L} með u fyrir önnur letur.
- Hegðar mynstur sem prófað er hér sér eins í Python eða PHP?
- Grunnsetningafræðin flyst yfir, en smáatriði eru ólík: nefndir hópar í Python eru skrifaðir
(?P<name>…), PHP og Python styðja possessive-stuðla sem JavaScript hefur ekki og reglur um lookbehind eru breytilegar. Prófaðu aftur í vélinni sem á að nota. - Hvernig samsvara ég bókstaflegum punkti eða sviga?
- Settu bakstrik fyrir framan það:
\.passar við punkt og\[við upphafshornklofa. Inni í stafaflokki eru flest tákn þegar bókstafleg, þannig að[.]passar líka aðeins við punkt. - Af hverju fraus síðan á meðan ég var að skrifa mynstur?
- Mynstrið olli líklega stórfelldu afturhvarfi á textanum þínum. Endurhlaðaðu og forðastu hreiðraða stuðla eins og
(.*)*eða(a+)+og láttu hvern hluta passa við sem minnst.