Pansubok ng Regex

[ MGA TUGMA ]
3
3 groups · 1 named
Tugma3
Mga grupo3
Mga pinangalanang grupo1
[ BAWAT TUGMA ]
linya 1 · sa 50917 555 1234
$1: 0917
$2: 555
$3: 1234
$<area>: 0917
linya 1 · sa 220918-555-9876
$1: 0918
$2: 555
$3: 9876
$<area>: 0918
linya 2 · sa 560922 555 0000
$1: 0922
$2: 555
$3: 0000
$<area>: 0922
[ ANO ITO ]

Tatlo sa anim na flag ang madalas na hindi maintindihan, kaya nakasulat sila sa pahina.

Ang hindi pinapatugma ng tuldok ang newline maliban kung nakabukas ang s. Ang inaabot ng karamihan ay m — pero ibang bagay iyon: binabago nito ang kahulugan ng ^ at $. Iyan ang pinakakaraniwang dahilan kung bakit humihinto ang pattern sa dulo ng linya.

Ang grupong hindi lumahok ay undefined, hindi blangko. Sa (a)|(b) laban sa b, hindi lumahok ang unang grupo — at ang tester na nagpi-print ng blangko doon ay nagsasabi ng mali. Doon mismo nakatira ang karamihan ng pagkalito sa isang pattern.

At ang catastrophic backtracking ay hindi mapipigilan dito. Walang paraan sa JavaScript para putulin ang tumatakbong pagtutugma. Ang totoo: tumatakbo ito sa browser MO, kaya ang pinakamasama ay mag-freeze ang tab na ito.

[ MGA TANONG ]

Bakit humihinto ang pattern ko sa dulo ng linya?

Dahil hindi tinatamaan ng tuldok ang bagong linya maliban kung nakatakda ang s flag. Ang m ang inaabot ng marami, at ibang bagay iyon — binabago ng m kung ano ang ibig sabihin ng ^ at $, kaya tumatama sila sa bawat line break at hindi lang sa dulo ng buong teksto. Kung gusto mong tumawid ang tuldok sa bagong linya, ang s ang gusto mo.

Ano ang pagkakaiba ng may g flag at wala?

Kapag walang g ay ang unang tinamaan lang ang iniuulat ng pattern — iyon ang ibig sabihin ng hindi pandaigdig at hindi limitasyon ng pahinang ito. Kapag may g ay makukuha mo ang lahat. Mahalaga rin ito sa pagpapalit: ang hindi pandaigdig na replace ay binabago ang unang paglitaw at iniiwan ang iba.

Bakit may grupo akong ipinapakitang “hindi lumahok”?

Dahil talagang hindi ito lumahok. Sa pattern na tulad ng (a)|(b) na itinapat sa b, hindi kailanman lumahok ang grupo 1, at undefined ang halaga nito at hindi blangkong string. Karamihan sa tester ay walang inililimbag doon, na nagmumungkahing tumama ito sa kawalan — iba at nakakalito iyon. Kadalasan ay dito talaga nakatira ang pagkalito tungkol sa isang pattern.

Ano ang ibig sabihin ng “tumatama sa blangkong string”?

Na kayang tamaan ng pattern mo ang wala, kaya tumatama ito sa bawat puwesto sa pagitan ng mga karakter. Kadalasan ay quantifier na dapat sanang + ang naging *: tumatama ang \d* sa blangkong string kahit saan, samantalang kailangan ng \d+ ng kahit isang digit. Bihira itong gusto ninuman at madaling hindi mapansin, kaya sinasabi ito ng pahina.

Puwede bang mag-freeze ang browser ko dahil sa isang pattern?

Oo. Ang pattern na may quantifier sa loob ng isa pang quantifier — ang hugis ng (a+)+ — ay puwedeng maging exponential ang tagal sa input na halos tumatama. Walang inaalok ang JavaScript na paraan para putulin ang tumatakbong pagtutugma, kaya walang tool na tunay na makakapigil dito. Nililimitahan ng pahinang ito ang input, nililimitahan ang listahan ng tinamaan, at nagbababala kapag nakilala ang hugis. Sa browser mo ito tumatakbo, kaya ang pinakamasama ay ang pag-freeze ng tab na ito at hindi ang pagbagsak ng server.

Ginagamit ba nito ang parehong regex engine ng code ko?

Kung JavaScript ang code mo, oo — ginagamit nito ang sariling RegExp ng browser. Tunay na nagkakaiba ang ibang wika: nagkakaiba-iba ang lookbehind, ang anyo ng named group, ang possessive quantifier at ang ibig sabihin ng \b sa paligid ng letrang hindi ASCII. Subukin sa engine na talagang pagtatakbuhan mo bago umasa sa isang pattern.

Ipinapadala ba kahit saan ang teksto ko?

No. Everything is matched in your browser and nothing is transmitted or stored.

[ ANG KOMPUTASYON ]
Ang anim na flag
glahat ng tugma, hindi lang ang una
ihuwag pansinin ang malaki at maliit na titik
m^ at $ sa bawat linya
stinatawid na ng tuldok ang newline
ucode point, para gumana ang \p{L}
ysa lastIndex lamang

Ang m at s ang madalas na pinagpapalit. Magkaiba sila ng trabaho.

[ ANG HUGIS NA SUMASABOG ]

Ang (a+)+ — quantifier sa loob ng quantifier — ay puwedeng maging exponential sa input na halos tumutugma. Binabalaan ito ng pahina at hindi tinatanggihan: baka tama naman ito sa input na hawak mo. Palatandaan ito, hindi garantiya.

[ SUSUNOD ]
52Hanapin at PalitanWhen you know what you want and just want it changed
54Pang-kuha sa TekstoThe common patterns, already written
48Paghahambing ng TekstoFor differences a pattern will not find
50Mga Tool sa LinyaTidy the list your matches produced
[ MAHALAGA ]

Runs in your browser using its own RegExp engine, so results match JavaScript. Other languages differ on lookbehind, named groups and word boundaries. A pattern nesting quantifiers can take exponential time and no tool can interrupt it — the warning is a hint, not a guarantee. Walang ipinapadala sa mga server namin ang tina-type mo rito — sa browser mo tumatakbo nang buo ang pagkuwenta.