Regex tesztelő
Írjon be egy mintát, jelölje be a szükséges jelzőket, és illesszen be egy szöveget: gépelés közben minden találat kiemelődik, és listában is megjelenik a pozíciójával és a rögzítő csoportjaival együtt. A minta a böngésző saját JavaScript regexmotorján fut, így az eredmény megegyezik azzal, amit a kódja ad, a szöveg pedig az eszközén marad.
0 karakter · 0 szó · 0 sor
A találatok itt lesznek kiemelve.0 karakter · 0 szó · 0 sor
Teljes egészében ebben a böngészőlapon fut. A szöveget soha nem töltjük fel és nem tároljuk.
JavaScript regex-elemek
Az első találat oszlopát úgy kaptuk, hogy minden mintát lefuttattunk a hozzá tartozó szövegen az oldalt létrehozó JavaScript-motorral.
| Token | Jelentés | Minta | Szöveg | Első találat |
|---|---|---|---|---|
\d | 0–9 számjegy | /\d+/ | Order 66 shipped | 66 |
\w | Betű, számjegy vagy aláhúzás (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Szóköz jellegű karakter, a tabulátorokat és sortöréseket is beleértve | /\s+/ | two spaces | |
. | Bármely karakter a sortörés kivételével (s flaggel azt is) | /a.c/ | abc a-c | abc |
^ $ | A bemenet (m flaggel a sor) eleje és vége | /^\w+$/ | single | single |
[abc] | A felsorolt karakterek egyike | /[aeiou]/ | rhythm and blues | a |
[^abc] | Bármely nem felsorolt karakter | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 vagy több, 1 vagy több, 0 vagy 1 | /colou?r/ | color colour | color |
{n,m} | n és m alkalom között | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Befogó csoport | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Elnevezett befogó csoport | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Nem befogó csoport | /(?:ab)+/ | ababab! | ababab |
a|b | Bármelyik oldal | /cat|dog/ | hotdog | dog |
\b | Szóhatár | /\bcat\b/ | concat cat | cat |
(?=…) | Ezt követi (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Nem ez előzi meg (negatív lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Bármely Unicode-betű (u flag kell hozzá) | /\p{L}+/u | naïve 東京 | naïve |
A hat jelző és a hatásuk
A g (globális) az első találatnál megállás helyett minden találatot megkeres; nélküle a lista egyetlen elemet tartalmaz. Az i nem tesz különbséget kis- és nagybetű között. Az m (többsoros) hatására a ^ és a $ nem csak a teljes szöveg, hanem minden sor elején és végén illeszkedik, ami például a sorvégi szóközök kereséséhez kell. Az s (dotAll, az ES2018 óta) lehetővé teszi, hogy a . a sortöréseket is elfogadja. A u (unicode) a szöveget kódpontokként kezeli, így egy emoji egy karakternek számít, és engedélyezi a tulajdonságmenekítéseket, például a \p{L} kifejezést bármely írásrendszer bármely betűjére. Az y (sticky) csak pontosan az aktuális pozícióban illeszkedik; a tokenizálók ezt a módot használják. A JavaScript ismeri még a d (találati indexek) és a v (halmazműveletek az osztályokban) jelölőt is, de ez az eszköz a fenti hatnál marad.
A tesztszöveg alatt minden találat mellett látszik az indexe és a csoportjai. A számozott csoportok a sima zárójelekből jönnek, a (?:…) csoportok nem rögzítenek, a (?<year>\d{4}) pedig névvel ellátott csoportot hoz létre, amely név szerint jelenik meg, ahogy az ISO-dátum minta mutatja. A Gyakori minták menü kipróbált kiindulópontokat szúr be e-mail-címekhez, URL-ekhez, IPv4-címekhez, hexadecimális színekhez, UUID-khez, ismétlődő szavakhoz és sorvégi szóközökhöz. Az e-mail-mintát vegye józansági ellenőrzésnek, nem érvényesítésnek: a teljes címnyelvtan sokkal megengedőbb, és az egyetlen valódi próba egy üzenet elküldése.
Visszatekintés (lookbehind) és katasztrofális visszalépés
A körbenézések (lookaround) egy pozíció környezetét vizsgálják anélkül, hogy elfogyasztanák azt. Az előre nézés, a (?=…) és a (?!…), mindig is része volt a JavaScriptnek; a hátranézés, a (?<=…) és a (?<!…), az ES2018-cal érkezett, és 2023-ban, a Safari 16.4 megjelenésével minden nagy böngészőben elérhetővé vált. Így a (?<=\$)\d+ a „$42” szövegben a 42-t találja meg a dollárjel nélkül. Sok más motorral ellentétben a JavaScript tetszőleges hosszúságú hátranézést enged.
A JavaScript motorja visszalépéses (backtracking): ha egy út zsákutcának bizonyul, visszalép, és kipróbálja az alternatívákat. A beágyazott kvantorok, például a (a+)+$, exponenciálisan sokféleképpen oszthatják fel ugyanazt a szöveget, így 30 darab a betű és egy x másodpercekig, néhány további betű pedig órákig tarthat. Ez a katasztrofális visszalépés, amely szervereken ReDoS-sá, szolgáltatásmegtagadássá válik; egyetlen ilyen hibás WAF-szabály 2019. július 2-án nagyjából fél órára leállította a Cloudflare hálózatát. Mivel ez az eszköz az Ön böngészőlapján fut, egy ilyen minta lefagyaszthatja az oldalt; töltse újra, és írja át úgy, hogy két kvantor ne tarthasson igényt ugyanazokra a karakterekre: használjon szűkebb osztályokat, például [^,]* kifejezést a .* helyett, vagy horgonyokat. Ha magát a szöveget szerkesztené, nem keresne benne, nézze meg a szövegeszközöket; további fejlesztői segédeszközöket a fejlesztői eszközök oldalon talál.
Gyakori kérdések
- Miért csak egy találatot ad a regexem?
- A g jelölő ki van kapcsolva. Enélkül a motor az első találat után megáll. Jelölje be a g-t az összes előfordulás listázásához; az y jelölő önmagában is több találatot ad, de csak akkor, ha azok közvetlenül egymás után következnek.
- JavaScriptben a \d más írásrendszerek számjegyeire is illeszkedik?
- Nem. A JavaScriptben a \d csak a 0–9 számjegyeket jelenti, a \w pedig csak az ASCII betűket, számjegyeket és az aláhúzást, még a u jelölővel is. Más írásrendszerekhez használja a \p{Nd} vagy \p{L} kifejezést u jelölővel.
- Az itt tesztelt minta ugyanígy működik Pythonban vagy PHP-ban?
- Az alapszintaxis átvihető, de a részletek eltérnek: a Python névvel ellátott csoportjait
(?P<name>…)alakban írják, a PHP és a Python támogatja a birtokos kvantorokat, amelyek a JavaScriptből hiányoznak, és a hátranézés szabályai is változnak. Próbálja ki újra a célmotorban. - Hogyan illeszthetek egy szó szerinti pontot vagy zárójelet?
- Védje meg visszaper-jellel: a
\.pontot, a\[nyitó szögletes zárójelet jelent. Karakterosztályon belül a legtöbb jel már alapból szó szerinti, így a[.]is csak a pontra illeszkedik. - Miért fagyott le az oldal, miközben a mintát gépeltem?
- A minta valószínűleg katasztrofális visszalépést okozott a szövegén. Töltse újra az oldalt, majd kerülje a beágyazott kvantorokat, például a
(.*)*vagy(a+)+alakot, és úgy írja meg a részeket, hogy mindegyik a lehető legkevesebbet illessze.