Paano gamitin ang Regex Tester
- Ilagay ang iyong pattern sa pagitan ng mga slash, nang walang nakapaligid na
/. - I-toggle ang mga flag gaya ng
g (lahat ng match), i (balewala ang case) at m (multiline). - I-paste ang iyong test text. Naka-highlight ang mga match sa kanan at nakalista sa ibaba kasama ang index at capture group nila.
- I-tick ang Palitan at maglagay ng replacement gaya ng
$1 o $<name> para silipin ang String.replace. - Pumili ng pattern mula sa Library ng pattern para magsimula sa nasubukan nang regex para sa email, URL, IP o petsa.
Mga regular expression ng JavaScript
Ginagamit ng tester na ito ang sariling RegExp engine ng iyong browser, kaya eksaktong pareho ang resulta sa ibinabalik ng String.match, matchAll, replace at RegExp.exec sa JavaScript at Node.js. Kasama rito ang modernong syntax: named group na (?<name>…), lookbehind na (?<=…), Unicode property escape gaya ng \p{L} gamit ang u flag, at match indices gamit ang d flag.
Ano ang ginagawa ng mga flag
| Flag | Pangalan | Epekto |
g | global | Hanapin ang bawat match sa halip na huminto sa una. |
i | ignoreCase | Tumutugma ang mga letra anuman ang case. |
m | multiline | Tumutugma ang ^ at $ sa simula at dulo ng bawat linya. |
s | dotAll | Tumutugma rin ang . sa mga line break. |
u | unicode | Ituring ang pattern bilang mga code point; pinapagana ang \p{…} at \u{…}. |
y | sticky | Tumutugma lang sa kasalukuyang posisyon ng lastIndex. |
d | hasIndices | Iulat ang simula at dulong posisyon ng bawat capture group. |
Proteksyon laban sa catastrophic backtracking
Ang mga pattern na may nested quantifier, gaya ng (a+)+$ o (\w|\d)*x, ay puwedeng tumagal nang exponential sa mga input na halos tumutugma. Sa ordinaryong web page, nagfi-freeze nito ang tab. Dito, tumatakbo ang bawat match sa background na Web Worker na pinapahinto pagkalipas ng isang segundo, at malinaw na babala ang makukuha mo sa halip na nag-hang na browser. Ang parehong pattern sa production code ay puwedeng maging ReDoS vulnerability, kaya ituring ang babala bilang bug na dapat ayusin.
Mga tip para sa mas mahusay na regex
- I-anchor ang mga pattern gamit ang
^ at $ kapag nagva-validate ng buong value, kung hindi ay papasa ang match kahit saan sa string.
- Mas piliin ang mga tiyak na class gaya ng
[^"]* kaysa .*; mas mabilis ang mga ito at iniiwasan ang sobrang pag-match.
- Gumamit ng non-capturing group na
(?:…) kapag hindi mo kailangan ang na-capture na value.
- Pangalanan ang iyong mga group. Mas madaling basahin ang
match.groups.year kaysa match[1].
Mga madalas itanong
Anong regex flavor ang ginagamit ng tester na ito?
JavaScript (ECMAScript), sa pamamagitan ng built-in na RegExp ng iyong browser. Karamihan ng syntax ay kapareho ng PCRE, Python at Java, pero wala sa JavaScript ang mga feature gaya ng possessive quantifier, atomic group at inline modifier gaya ng (?i).
Bakit iisang match lang ang nahahanap ng pattern ko?
Kapag walang g (global) flag, humihinto ang JavaScript pagkatapos ng unang match. I-enable ang g para mahanap ang bawat paglitaw.
Paano tukuyin ang mga group sa replacement?
Gamitin ang $1, $2… para sa numbered group, $<name> para sa named group, $& para sa buong match at $$ para sa literal na dollar sign.
Bakit huminto ang tester dahil sa timeout?
Tumagal nang higit sa isang segundo ang pattern sa iyong input, na halos laging nangangahulugang catastrophic backtracking. Hanapin ang mga nested quantifier gaya ng (x+)+ o nagsasapawang alternative gaya ng (a|a)* at isulat muli ang mga ito para iisang paraan lang ma-match ang bawat character.
Ipinapadala ba kahit saan ang test data ko?
Hindi. Lokal na tumatakbo ang matching sa isang Web Worker sa loob ng iyong browser. Sa sarili mong browser lang sine-save ang pattern at text mo para nandoon pa rin ang mga ito pagbalik mo.