UltKit

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.

Flagek

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.

TokenJelentésMintaSzövegElső találat
\d0–9 számjegy/\d+/Order 66 shipped66
\wBetű, számjegy vagy aláhúzás (ASCII)/\w+/snake_case-idsnake_case
\sSzó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-cabc
^ $A bemenet (m flaggel a sor) eleje és vége/^\w+$/singlesingle
[abc]A felsorolt karakterek egyike/[aeiou]/rhythm and bluesa
[^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 colourcolor
{n,m}n és m alkalom között/\d{2,4}/7 42 1999 12345642
(…)Befogó csoport/(\d+)px/width: 320px320px
(?<name>…)Elnevezett befogó csoport/(?<h>\d\d):(?<m>\d\d)/at 09:4509:45
(?:…)Nem befogó csoport/(?:ab)+/ababab!ababab
a|bBármelyik oldal/cat|dog/hotdogdog
\bSzóhatár/\bcat\b/concat catcat
(?=…)Ezt követi (lookahead)/\d+(?=%)/50 of 75%75
(?<!…)Nem ez előzi meg (negatív lookbehind)/(?<!\$)\b\d+/$30 or 4040
\p{L}Bármely Unicode-betű (u flag kell hozzá)/\p{L}+/unaï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.