Kipima Regex
Andika ruwaza, weka alama kwenye bendera unazohitaji na ubandike maandishi: kila linalolingana huangaziwa unapoandika na huorodheshwa pamoja na nafasi yake na vikundi vya kunasa. Ruwaza huendeshwa na injini ya regex ya JavaScript ya kivinjari chako chenyewe, hivyo matokeo yanalingana na msimbo wako na maandishi hubaki kwenye kifaa chako.
Herufi 0 · maneno 0 · mistari 0
Zinazolingana zinaangaziwa hapa.Herufi 0 · maneno 0 · mistari 0
Inafanya kazi kabisa ndani ya kichupo hiki cha kivinjari. Maandishi yako hayapakiwi wala kuhifadhiwa.
Tokeni za regex za JavaScript
Safu ya inayolingana ya kwanza ilipatikana kwa kuendesha kila ruwaza kwenye maandishi yake kwa injini ya JavaScript iliyojenga ukurasa huu.
| Tokeni | Maana | Ruwaza | Maandishi | Inayolingana ya kwanza |
|---|---|---|---|---|
\d | Tarakimu 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Herufi, tarakimu au mstari wa chini (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Nafasi tupu, ikiwemo tabu na ukataji wa mistari | /\s+/ | two spaces | |
. | Herufi yoyote isipokuwa ukataji wa mstari (isipokuwa s) | /a.c/ | abc a-c | abc |
^ $ | Mwanzo na mwisho wa ingizo (au mstari, na m) | /^\w+$/ | single | single |
[abc] | Mojawapo ya herufi zilizoorodheshwa | /[aeiou]/ | rhythm and blues | a |
[^abc] | Herufi yoyote isiyoorodheshwa | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 au zaidi, 1 au zaidi, 0 au 1 | /colou?r/ | color colour | color |
{n,m} | Kati ya mara n na m | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Kikundi cha kunasa | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Kikundi cha kunasa chenye jina | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Kikundi bila kunasa | /(?:ab)+/ | ababab! | ababab |
a|b | Upande wowote | /cat|dog/ | hotdog | dog |
\b | Mpaka wa neno | /\bcat\b/ | concat cat | cat |
(?=…) | Inafuatwa na (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Haitangulizwi na (negative lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Herufi yoyote ya Unicode (inahitaji u) | /\p{L}+/u | naïve 東京 | naïve |
Bendera sita na kile zinachobadilisha
g (global) hupata kila inayolingana badala ya kuishia kwenye ya kwanza; bila hiyo orodha ina kipengee kimoja tu. i hupuuza herufi kubwa na ndogo. m (multiline) hufanya ^ na $ zilingane mwanzoni na mwishoni mwa kila mstari badala ya mwanzo na mwisho wa maandishi yote, jambo unalohitaji kwa mchoro kama nafasi za mwishoni. s (dotAll, iliyoongezwa katika ES2018) huruhusu . kulingana na viganja vya mistari pia. u (unicode) hushughulikia maandishi kama code points, kwa hivyo emoji huhesabiwa kama herufi moja, na huwezesha property escapes kama \p{L} kwa herufi yoyote katika mfumo wowote wa uandishi. y (sticky) hulingana tu hasa kwenye nafasi ya sasa, hali inayotumiwa na tokenizers. JavaScript ina pia d kwa match indices na v kwa operesheni za seti ndani ya madarasa; kijaribio hiki kinatumia sita zilizo juu tu.
Chini ya maandishi ya majaribio, kila inayolingana huonyesha faharasa yake na vikundi vyake. Vikundi vyenye namba hutokana na mabano ya kawaida, vikundi vya (?:…) havinasi, na (?<year>\d{4}) huunda kikundi chenye jina kinachoonekana kwa jina, kama mfano wa tarehe ya ISO unavyoonyesha. Menyu ya Common patterns huingiza mifano ya kuanzia iliyojaribiwa ya barua pepe, URL, anwani za IPv4, rangi za hex, UUID, maneno yanayorudiwa na nafasi za mwishoni. Chukulia mchoro wa barua pepe kama ukaguzi wa haraka, si uthibitishaji: sarufi kamili ya anwani ni pana zaidi, na jaribio halisi ni kutuma ujumbe.
Lookbehind na backtracking inayokwamisha
Lookarounds hujaribu kinachozunguka nafasi bila kukitumia. Lookahead, (?=…) na (?!…), imekuwa sehemu ya JavaScript siku zote; lookbehind, (?<=…) na (?<!…), ilikuja katika ES2018 na kufika kwenye vivinjari vyote vikuu Safari 16.4 ilipoitoa mwaka 2023. Kwa hivyo (?<=\$)\d+ hupata 42 katika "$42" bila kujumuisha alama ya dola. Tofauti na injini nyingine nyingi, JavaScript huruhusu lookbehind ya urefu wowote.
Injini ya JavaScript hutumia backtracking: njia inaposhindwa, hurudi nyuma na kujaribu mbadala. Vikadiriaji vilivyoundwa ndani ya vingine kama (a+)+$ huipa njia nyingi kupita kiasi za kugawanya maandishi yale yale, kwa hivyo mfuatano wa a 30 ukifuatwa na x unaweza kuchukua sekunde, na herufi chache zaidi zinaweza kuchukua saa. Hii ni catastrophic backtracking, na kwenye seva inakuwa ReDoS, ushambulizi wa kunyima huduma; kanuni moja ya WAF yenye kasoro hii iliangusha mtandao wa Cloudflare kwa takriban nusu saa Julai 2, 2019. Kwa kuwa kijaribio hiki kinaendeshwa kwenye kichupo chako, mchoro wa aina hiyo unaweza kugandisha ukurasa; pakia upya na uuandike upya ili vikadiriaji viwili visidai herufi zilezile, ukitumia madarasa finyu kama [^,]* badala ya .*, au nanga. Kwa kuhariri maandishi yenyewe badala ya kuyalinganisha, tazama zana za maandishi; zana zaidi za wasanidi ziko kwenye kituo cha zana za wasanidi.
Maswali yanayoulizwa mara kwa mara
- Kwa nini regex yangu inapata linalolingana moja tu?
- Bendera g imezimwa. Bila hiyo, injini huishia baada ya inayolingana ya kwanza. Weka alama kwenye g ili kuorodhesha kila tukio; bendera y peke yake pia hupata kadhaa, lakini tu zinapofuatana moja kwa moja.
- Je, \d inalingana na tarakimu za maandishi mengine katika JavaScript?
- Hapana. Katika JavaScript \d humaanisha 0 hadi 9 tu na \w herufi za ASCII, tarakimu na mstari wa chini tu, hata na bendera u. Tumia \p{Nd} au \p{L} pamoja na u kwa mifumo mingine ya uandishi.
- Je, ruwaza iliyojaribiwa hapa itafanya kazi vivyo hivyo katika Python au PHP?
- Sintaksia ya msingi hubaki, lakini maelezo hutofautiana: vikundi vyenye jina vya Python huandikwa
(?P<name>…), PHP na Python zinasaidia vikadiriaji possessive ambavyo JavaScript haina, na kanuni za lookbehind hutofautiana. Jaribu tena kwenye injini lengwa. - Ninawezaje kulinganisha nukta au mabano halisi?
- Tumia kawia mkono kuliepuka:
\.hulingana na nukta na\[na mabano ya kufungua. Ndani ya darasa la herufi alama nyingi tayari ni halisi, kwa hivyo[.]pia hulingana na nukta tu. - Kwa nini ukurasa ulikwama nilipokuwa nikiandika ruwaza?
- Huenda mchoro ulisababisha catastrophic backtracking kwenye maandishi yako. Pakia upya, kisha epuka vikadiriaji vilivyoundwa ndani ya vingine kama
(.*)*au(a+)+na hakikisha kila sehemu inalingana na kidogo iwezekanavyo.