Asosiy qismga oʻtish

Muntazam ifodalarni (regex) sinash

JavaScript muntazam ifodasini matningizda sinang: mosliklar jonli belgilanadi, ushlovchi guruhlar va har bir tokenning oddiy tildagi izohi chiqadi — hammasi brauzeringizda.

JavaScript (ECMAScript) regex sintaksisiBrauzeringiz, Node.js va Deno dagi bilan bir xil dvigatel
//g

$1 yoki $<name> guruhni, $& butun moslikni, $` va $' undan oldingi va keyingi matnni, $$ esa dollar belgisini qoʻyadi.

Mosliklar va ushlangan guruhlar shu yerda chiqadi.

Brauzeringizda ishlaydi · yuklanmaydiQanday ishlaydi

Regex sinovchi: foydalanish tartibi

  1. 1

    Shablonni kiriting

    Muntazam ifodani qiya chiziqlarsiz yozing; bayroqlarni uning ostidagi tugmalar bilan tanlang.

  2. 2

    Sinov matnini qoʻshing

    Qidiriladigan matnni joylashtiring: mosliklar yozish davomida belgilanadi va guruhlari bilan roʻyxatga chiqadi.

  3. 3

    Izohni oʻqing

    Har bir tokenning oddiy tildagi izohini oʻqish va shablon aslida nima qilishini koʻrish uchun “Izoh” yorligʻini oching.

  4. 4

    Almashtirishni sinang

    $1 yoki $<name> bilan almashtirish qiymatini yozib, natijani koʻring, soʻng kodni “Kod” yorligʻidan nusxalang.

Cheklovlar va Pro

Bepul, roʻyxatdan oʻtishsiz: 100 000 tagacha moslik sanaladi, 2 000 tasi matnda belgilanadi, 200 tasi jadvalda chiqadi; belgilash 200 000 belgigacha boʻlgan matnda ishlaydi, har bir ishga tushirish 1,5 soniyadan keyin toʻxtatiladi.

Pro reklamani olib tashlaydi; vosita barcha tariflarda bir xil ishlaydi. Pro tarifini koʻrish

Regex sinovchi haqida

Bu vosita shablonni brauzerga oʻrnatilgan JavaScript (ECMAScript) muntazam ifodalar dvigatelida ishga tushiradi — Node.js, Deno, Bun va har bir veb-sahifa ham aynan shundan foydalanadi, demak bu yerda mos kelgan narsa kodingizda ham mos keladi. Shablon va sinov matnini yozing: har bir moslik yozish davomida belgilanadi, yonida oʻrinlar, raqamli va nomli ushlovchi guruhlar jadvali chiqadi, d bayrogʻi yoqilganda esa har bir guruhning boshi va oxiri ham koʻrinadi.

Sakkizta bayroqning hammasini yoqib-oʻchirish mumkin: g — barcha mosliklar, i — registrni hisobga olmaslik, m — ^ va $ har bir qatorda ishlashi, s — nuqta qator uzilishiga ham mos kelishi, u — toʻliq Unicode va \p{…} xossalari, v — kvadrat qavs ichida kesishma va ayirma amallari bilan Unicode toʻplamlari, y — “yopishqoq” qidiruv, d — indekslar. Almashtirish maydoni String.prototype.replace natijasini $1, $<name>, $& va boshqa oʻrniga qoʻyish belgilari bilan oldindan koʻrsatadi, “Kod” yorligʻi esa tayyor literal, matchAll va RegExp() parchalarini beradi.

“Izoh” yorligʻi shablonni boʻlaklarga ajratib, har biri nima qilishini oddiy tilda aytadi: guruhlar, oldinga va orqaga qarashlar, belgilar sinflari, kvantifikatorlar va ular ochkoʻz (greedy) yoki dangasa (lazy) ekani. Qisqa qoʻllanmadagi tokenni bossangiz, u kursor turgan joyga qoʻyiladi.

Qidiruv fondagi alohida oqimda (Web Worker) 1,5 soniyalik chegara bilan ishlaydi. Uzun “aaaa…” qatoriga qoʻllangan (a+)+b kabi halokatli orqaga qaytadigan shablon oynani qotirib qoʻymaydi — u toʻxtatiladi va sababi tushuntiriladi. PCRE, Python yoki .NET uchun yozilgan shablonlarni oʻzgartirish kerak boʻlishi mumkin: JavaScript da possessive kvantifikatorlar, atomar guruhlar, rekursiya, \A va \Z yoʻq.

Maxfiylik

Shablon va sinov matni shu brauzer oynasida qoladi: qidiruv lokal Web Worker ichida bajariladi, yozganingiz hech qayerga yuklanmaydi, jurnalga yozilmaydi va saqlanmaydi. Shuning uchun haqiqiy log qatorlari yoki mijozlar maʼlumotlarida ham bemalol sinab koʻrish mumkin.

Imkoniyatlar

Haqiqiy JS dvigateli

Brauzer va Node.js dagi RegExp bilan aynan bir xil ishlaydi, v bayrogʻidagi toʻplamlar va nomli guruhlar ham.

Boʻlakma-boʻlak izoh

Har bir guruh, sinf, langar va kvantifikator oddiy tilda tushuntiriladi.

Orqaga qaytishdan himoya

Qidiruv 1,5 soniyalik chegara bilan alohida oqimda ishlaydi, yomon shablon sahifani qotira olmaydi.

Regex sinovchi: koʻp beriladigan savollar

Bu vosita qaysi regex sintaksisidan foydalanadi?
JavaScript sintaksisidan: ECMAScript standartida belgilangan va siz ishlatayotgan brauzerda amalga oshirilgan. Orqaga qarash, nomli guruhlar, Unicode xossalari va v bayrogʻi qoʻllanadi, lekin possessive kvantifikatorlar, atomar guruhlar, rekursiya yoki shartli ifodalar kabi PCRE imkoniyatlari yoʻq. Python dagi (?P<name>…) bu yerda (?<name>…) deb yoziladi. Natijalar dvigatel versiyasi bir xil boʻlgan Node.js va Deno bilan mos keladi.
Nega shablonim faqat birinchi moslikni topadi?
g bayrogʻisiz JavaScript birinchi moslikdan keyin toʻxtaydi: exec va match bitta natija qaytaradi, replace esa faqat birinchi uchragan joyni almashtiradi. Har bir moslikni topish va almashtirish uchun g ni yoqing. “Yopishqoq” y bayrogʻi boshqacha ishlaydi: u faqat oldingi moslik tugagan aniq oʻrindan qidiradi, bu tokenizatorlar yozishda qoʻl keladi.
Halokatli orqaga qaytish (catastrophic backtracking) nima?
Shablon bir matnga koʻp xil yoʻl bilan mos kela olsa, masalan, (a+)+ yoki (.*)* kabi ichma-ich kvantifikatorlarda, muvaffaqiyatsiz qidiruv dvigatelni barcha kombinatsiyalarni sinashga majbur qiladi va ularning soni matn uzunligi bilan eksponensial oʻsadi. Bu yerda bunday qidiruv 1,5 soniyadan keyin ogohlantirish bilan toʻxtatiladi. Muqobillarni bir-birini istisno qiladigan qilib tuzating, masalan, verguldan oldin .* oʻrniga [^,]* yozing.
Almashtirishda ushlovchi guruhlardan qanday foydalanaman?
Raqamli guruhlar uchun $1, $2 va hokazo, (?<year>\d{4}) kabi nomli guruh uchun esa $<name> yozing. $& butun moslikni, $` undan oldingi matnni, $' undan keyingi matnni qoʻyadi, $$ esa oddiy dollar belgisini beradi. “Misolni sinash” tugmasi yil, oy va kunning oʻrnini aynan shu usulda almashtiradigan sana shablonini yuklaydi.
u yoki v bayrogʻi qachon kerak?
Matningizda emoji yoki Asosiy koʻp tilli tekislikdan (BMP) tashqaridagi boshqa belgilar boʻlsa, nuqta va kvantifikatorlar ularni bitta belgi deb olishi uchun, shuningdek, \p{L} kabi Unicode xossalaridan foydalanish uchun u ni yoqing. Yangiroq v bayrogʻi u ning barcha imkoniyatlarini oʻz ichiga oladi va qavs ichida toʻplam amallarini qoʻshadi, masalan, ASCII boʻlmagan harflar uchun [\p{L}--[a-z]]. Bu ikki bayroqni birga ishlatib boʻlmaydi.