Regex Tester para sa JavaScript

Mag-type ng regular expression at makita ang bawat match na naka-highlight habang nagta-type ka, kasama ang capture group, preview ng replacement at library ng handang pattern.

Tumatakbo sa browser moWalang sign-upWalang ina-upload

Naka-highlight ang mga match

    
Gamitin ang $1, $<name>, $& (buong match)
Detalye ng mga match
#IndexMatchMga group
Regex cheat sheet
.Kahit anong character maliban sa newline (kahit ano kapag may s)
\d \w \sDigit, word character, whitespace
\D \W \SHindi digit, hindi word, hindi whitespace
[abc] [^abc]Alinman sa / wala sa a, b, c
[a-z0-9]Range ng character
\p{L} \p{N}Unicode na letra / numero (kailangan ng u)
^ $Simula / dulo ng input (ng linya kapag may m)
\b \BWord boundary / hindi boundary
* + ?0 o higit pa, 1 o higit pa, 0 o 1
{n} {n,} {n,m}Eksaktong n, hindi bababa sa n, mula n hanggang m
*? +? ??Lazy (pinakakaunti hangga't maaari)
a|ba o b
(…)Capture group, tinutukoy bilang $1
(?<name>…)Named group, $<name>
(?:…)Non-capturing group
\1 \k<name>Backreference
(?=…) (?!…)Lookahead / negative lookahead
(?<=…) (?<!…)Lookbehind / negative lookbehind
\. \* \\Mga escaped na literal na character
\n \t \rNewline, tab, carriage return
\uFFFFUnicode code unit
\u{1F600}Code point (kailangan ng u)
$&Buong match sa isang replacement
$` $'Text bago / pagkatapos ng match

Paano gamitin ang Regex Tester

  1. Ilagay ang iyong pattern sa pagitan ng mga slash, nang walang nakapaligid na /.
  2. I-toggle ang mga flag gaya ng g (lahat ng match), i (balewala ang case) at m (multiline).
  3. I-paste ang iyong test text. Naka-highlight ang mga match sa kanan at nakalista sa ibaba kasama ang index at capture group nila.
  4. I-tick ang Palitan at maglagay ng replacement gaya ng $1 o $<name> para silipin ang String.replace.
  5. 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

FlagPangalanEpekto
gglobalHanapin ang bawat match sa halip na huminto sa una.
iignoreCaseTumutugma ang mga letra anuman ang case.
mmultilineTumutugma ang ^ at $ sa simula at dulo ng bawat linya.
sdotAllTumutugma rin ang . sa mga line break.
uunicodeIturing ang pattern bilang mga code point; pinapagana ang \p{…} at \u{…}.
ystickyTumutugma lang sa kasalukuyang posisyon ng lastIndex.
dhasIndicesIulat 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.

Mga kaugnay na tool