Hogyan használd: Regex tesztelő
- Írd be a mintát a perjelek közé, a körülvevő
/ jelek nélkül. - Kapcsold be a flageket, például a
g (minden találat), az i (kis-/nagybetű nem számít) és az m (többsoros) flaget. - Illeszd be a tesztszöveget. A találatok jobb oldalon kiemelve jelennek meg, alatta pedig indexükkel és rögzítő csoportjaikkal együtt listázva.
- Jelöld be a Csere opciót, és adj meg egy cserét, például
$1 vagy $<name>, hogy előnézetben lásd a String.replace eredményét. - Válassz egy mintát a Mintakönyvtárból, hogy egy kipróbált e-mail-, URL-, IP- vagy dátum-regexből indulj ki.
JavaScript reguláris kifejezések
Ez a tesztelő a böngésződ saját RegExp motorját használja, így az eredmények pontosan azok, amelyeket a String.match, a matchAll, a replace és a RegExp.exec ad vissza JavaScriptben és Node.js-ben. Ez a modern szintaxisra is vonatkozik: nevesített csoportok (?<name>…), lookbehind (?<=…), Unicode property escape-ek, mint a \p{L} az u flaggel, és találati indexek a d flaggel.
Mit csinálnak a flagek?
| Flag | Név | Hatás |
g | global | Minden találatot megkeres, nem áll meg az elsőnél. |
i | ignoreCase | A betűk kis- és nagybetűtől függetlenül illeszkednek. |
m | multiline | A ^ és a $ minden sor elején és végén illeszkedik. |
s | dotAll | A . a sortörésekre is illeszkedik. |
u | unicode | A mintát kódpontokként kezeli; engedélyezi a \p{…} és a \u{…} szintaxist. |
y | sticky | Csak az aktuális lastIndex pozíción illeszkedik. |
d | hasIndices | Minden rögzítő csoport kezdő- és végpozícióját megadja. |
Védelem a katasztrofális backtracking ellen
Az egymásba ágyazott kvantorokat tartalmazó minták, például a (a+)+$ vagy a (\w|\d)*x, majdnem illeszkedő bemeneteken exponenciális ideig futhatnak. Egy átlagos weboldalon ez lefagyasztja a lapot. Itt minden keresés egy háttérben futó Web Workerben zajlik, amelyet egy másodperc után leállítunk, és lefagyott böngésző helyett egyértelmű figyelmeztetést kapsz. Ugyanez a minta éles kódban ReDoS sérülékenység lehet, ezért a figyelmeztetést kezeld javítandó hibaként.
Tippek jobb regexek írásához
- Teljes értékek validálásakor horgonyozd a mintát
^ és $ jellel, különben a string bármely részén lévő találat is elfogadható lesz.
- A
.* helyett inkább konkrét osztályokat használj, például [^"]*; ezek gyorsabbak, és elkerülik a túl sok illeszkedést.
- Használj nem rögzítő csoportokat
(?:…), ha nincs szükséged a rögzített értékre.
- Nevezd el a csoportjaidat. A
match.groups.year könnyebben olvasható, mint a match[1].
Gyakran ismételt kérdések
Milyen regex-változatot használ ez a tesztelő?
JavaScriptet (ECMAScript), a böngésződ beépített RegExp objektumán keresztül. A szintaxis nagy része közös a PCRE-vel, a Pythonnal és a Javával, de az olyan funkciók, mint a possessive kvantorok, az atomi csoportok és az inline módosítók, például a (?i), JavaScriptben nem érhetők el.
Miért csak egy találatot ad a mintám?
A g (global) flag nélkül a JavaScript az első találat után megáll. Kapcsold be a g flaget az összes előfordulás megkereséséhez.
Hogyan hivatkozhatok a csoportokra a cserében?
A számozott csoportokhoz használd a $1, $2… formát, a nevesített csoportokhoz a $<name>, a teljes találathoz a $&, a szó szerinti dollárjelhez pedig a $$ jelölést.
Miért állt le a tesztelő időtúllépéssel?
A minta több mint egy másodpercig futott a bemeneteden, ami szinte mindig katasztrofális backtrackinget jelent. Keress egymásba ágyazott kvantorokat, mint a (x+)+, vagy átfedő alternatívákat, mint az (a|a)*, és írd át őket úgy, hogy minden karakter csak egyféleképpen illeszkedhessen.
Elküldjük valahova a tesztadataimat?
Nem. A keresés helyben, egy Web Workerben fut a böngésződben. A mintát és a szöveget csak a saját böngésződ tárolja, hogy visszatéréskor is megmaradjanak.