Regex tesztelő JavaScripthez

Írj be egy reguláris kifejezést, és gépelés közben minden találatot kiemelve látsz, rögzítő csoportokkal, csere-előnézettel és kész minták könyvtárával.

A böngésződben futNincs regisztrációNincs feltöltés

Kiemelt találatok

    
Használható: $1, $<name>, $& (teljes találat)
Találat részletei
#IndexTalálatCsoportok
Regex puska
.Bármely karakter az újsor kivételével (s mellett bármely)
\d \w \sSzámjegy, szókarakter, whitespace
\D \W \SNem számjegy, nem szókarakter, nem whitespace
[abc] [^abc]a, b, c bármelyike / egyike sem
[a-z0-9]Karaktertartomány
\p{L} \p{N}Unicode betű / szám (u kell hozzá)
^ $A bemenet eleje / vége (m mellett a soré)
\b \BSzóhatár / nem szóhatár
* + ?0 vagy több, 1 vagy több, 0 vagy 1
{n} {n,} {n,m}Pontosan n, legalább n, n és m között
*? +? ??Lusta (a lehető legkevesebb)
a|ba vagy b
(…)Rögzítő csoport, hivatkozás: $1
(?<name>…)Nevesített csoport, $<name>
(?:…)Nem rögzítő csoport
\1 \k<name>Visszahivatkozás
(?=…) (?!…)Lookahead / negatív lookahead
(?<=…) (?<!…)Lookbehind / negatív lookbehind
\. \* \\Escape-elt literális karakterek
\n \t \rÚjsor, tabulátor, kocsivissza
\uFFFFUnicode kódegység
\u{1F600}Kódpont (u kell hozzá)
$&A teljes találat a cserében
$` $'A találat előtti / utáni szöveg

Hogyan használd: Regex tesztelő

  1. Írd be a mintát a perjelek közé, a körülvevő / jelek nélkül.
  2. 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.
  3. 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.
  4. 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.
  5. 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?

FlagNévHatás
gglobalMinden találatot megkeres, nem áll meg az elsőnél.
iignoreCaseA betűk kis- és nagybetűtől függetlenül illeszkednek.
mmultilineA ^ és a $ minden sor elején és végén illeszkedik.
sdotAllA . a sortörésekre is illeszkedik.
uunicodeA mintát kódpontokként kezeli; engedélyezi a \p{…} és a \u{…} szintaxist.
ystickyCsak az aktuális lastIndex pozíción illeszkedik.
dhasIndicesMinden 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.

Kapcsolódó eszközök