GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Qo'llanma
  • Muntazam ifodalar

This view

  • Original page
  • New address

GeezerVison is showing uz.javascript.info — Miqdorchilar +, *, ? va {n}

Aytaylik, bizda +7(903)-123-45-67 kabi satr bor va unda barcha raqamlarni topishni xohlaymiz. Lekin avvalgidan farqli o’laroq, biz alohida raqamlar emas, balki to’liq raqamlar bilan qiziqamiz: 7, 903, 123, 45, 67.

Raqam – bu 1 yoki undan ko’p raqamlar ketma-ketligi \d. Qanchasi kerakligini belgilash uchun miqdorchi qo’shishimiz mumkin.

Miqdor {n}

Eng oddiy miqdorchi – jingalak qavs ichidagi raqam: {n}.

Miqdorchi belgi (yoki belgilar sinfi, yoki [...] to’plam va hokazo)ga qo’shiladi va qancha kerakligini belgilaydi.

Uning bir nechta ilg’or shakllari bor, misollarni ko’raylik:

Aniq son: {5}

\d{5} aynan 5 ta raqamni bildiradi, \d\d\d\d\d bilan bir xil.

Quyidagi misol 5 xonali raqamni qidiradi:

alert( "I'm 12345 years old".match(/\d{5}/) ); //  "12345"

Uzunroq raqamlarni chiqarib tashlash uchun \b qo’shishimiz mumkin: \b\d{5}\b.

Diapazon: {3,5}, 3-5 marta mos keladi

3 dan 5 gacha raqamlarni topish uchun chegaralarni jingalak qavslarga qo’yishimiz mumkin: \d{3,5}

alert( "I'm not 12, but 1234 years old".match(/\d{3,5}/) ); // "1234"

Yuqori chegarani tashlab qo’yishimiz mumkin.

Keyin \d{3,} regexp uzunligi 3 yoki undan ko’p raqamlar ketma-ketligini qidiradi:

alert( "I'm not 12, but 345678 years old".match(/\d{3,}/) ); // "345678"

+7(903)-123-45-67 satriga qaytaylik.

Raqam – bu bir yoki undan ko’p raqamlarning ketma-ketligi. Demak, regexp \d{1,}:

let str = "+7(903)-123-45-67";

let numbers = str.match(/\d{1,}/g);

alert(numbers); // 7,903,123,45,67

Qisqartmalar

Ko’p ishlatiladigan miqdorchilar uchun qisqartmalar mavjud:

+

“Bir yoki ko’p” degani, {1,} bilan bir xil.

Masalan, \d+ raqamlarni qidiradi:

let str = "+7(903)-123-45-67";

alert( str.match(/\d+/g) ); // 7,903,123,45,67
?

“Nol yoki bir” degani, {0,1} bilan bir xil. Boshqacha qilib aytganda, belgini ixtiyoriy qiladi.

Masalan, ou?r naqshi o dan keyin nol yoki bitta u, keyin r ni qidiradi.

Shunday qilib, colou?r ham color ham colour ni topadi:

let str = "Should I write color or colour?";

alert( str.match(/colou?r/g) ); // color, colour
*

“Nol yoki ko’p” degani, {0,} bilan bir xil. Ya’ni belgi istalgan marta takrorlanishi yoki umuman bo’lmasligi mumkin.

Masalan, \d0* raqamdan keyin istalgan miqdordagi nollarni qidiradi (ko’p yoki hech bo’lmasligi mumkin):

alert( "100 10 1".match(/\d0*/g) ); // 100, 10, 1

Uni + (bir yoki ko’p) bilan solishtiring:

alert( "100 10 1".match(/\d0+/g) ); // 100, 10
// 1 mos kelmadi, chunki 0+ kamida bitta nol talab qiladi

Ko’proq misollar

Miqdorchilar juda tez-tez ishlatiladi. Ular murakkab doimiy ifodalarning asosiy “qurilish bloki” vazifasini bajaradi, shuning uchun ko’proq misollarni ko’raylik.

O’nli kasrlar uchun regexp (suzuvchi nuqtali raqam): \d+\.\d+

Amalda:

alert( "0 1 12.345 7890".match(/\d+\.\d+/g) ); // 12.345

Atributsiz “HTML tegi ochish” uchun regexp, masalan <span> yoki <p>.

  1. Eng oddiyi: /<[a-z]+>/i

    alert( "<body> ... </body>".match(/<[a-z]+>/gi) ); // <body>

    Regexp '<' belgisini, keyin bir yoki ko’p lotin harflarini, keyin '>' ni qidiradi.

  2. Yaxshilangan: /<[a-z][a-z0-9]*>/i

    Standartga ko’ra, HTML teg nomi birinchisidan tashqari istalgan pozitsiyada raqamga ega bo’lishi mumkin, masalan <h1>.

    alert( "<h1>Hi!</h1>".match(/<[a-z][a-z0-9]*>/gi) ); // <h1>

“Atributsiz HTML tegi ochish yoki yopish” uchun regexp: /<\/?[a-z][a-z0-9]*>/i

Biz naqsh boshiga ixtiyoriy qiyshiq chiziq /? qo’shdik. Uni teskari chiziq bilan ekranlashga to’g’ri keldi, aks holda JavaScript uni naqsh oxiri deb o’ylaydi.

alert( "<h1>Hi!</h1>".match(/<\/?[a-z][a-z0-9]*>/gi) ); // <h1>, </h1>
Regexpni aniqroq qilish uchun ko’pincha uni murakkabroq qilishimiz kerak

Bu misollarda umumiy qoidani ko’rishimiz mumkin: doimiy ifoda qanchalik aniq bo’lsa – shunchalik uzun va murakkab.

Masalan, HTML teglar uchun biz oddiyroq regexpdan foydalanishimiz mumkin: <\w+>. Lekin HTML teg nomi uchun qattiqroq cheklovlarga ega bo’lgani uchun, <[a-z][a-z0-9]*> ishonchlirog’.

<\w+> ishlatamizmi yoki <[a-z][a-z0-9]*> kerakmi?

Haqiqiy hayotda ikkala variant ham qabul qilinadi. Bu “qo’shimcha” mosliklarga qanchalik toqat qilishimiz va ularni boshqa usullar bilan natijadan olib tashlash qiyin yoki yoqligiga bog’liq.

Vazifalar

"..." ellipsini qanday topish mumkin?

muhimlik: 5

Ellipsni topish uchun regexp yarating: ketma-ket 3 (yoki undan ko’p?) nuqta.

Tekshiring:

let regexp = /your regexp/g;
alert("Salom!... Qalay ketyapti?.....".match(regexp)); // ..., .....

Yechim:

let regexp = /\.{3,}/g;
alert("Salom!... Qanday ketyapti?.....".match(regexp)); // ..., .....

Esda tutingki, nuqta maxsus belgidir, shuning uchun biz undan qochishimiz va \. sifatida kiritishimiz kerak.

HTML ranglari uchun Regexp

#ABCDEF sifatida yozilgan HTML ranglarini qidirish uchun regexp yarating: avval # va keyin 6 o’n oltilik belgilar.

Misol:

let regexp = /...sizning regexp.../;

let str =
  "color:#121212; background-color:#AA00ef bad-colors:f#fddee #fd2 #12345678";

alert(str.match(regexp)); // #121212,#AA00ef

P.S. Bu vazifada bizga #123 yoki rgb(1,2,3) va hokazo kabi boshqa rang formatlari kerak emas.

Biz # dan keyin 6 o’n oltilik belgini izlashimiz kerak.

O‘n oltilik belgini [0-9a-fA-F] deb ta’riflash mumkin. Yoki i bayrog’idan foydalansak, shunchaki [0-9a-f].

Keyin {6} kvantifikatori yordamida ulardan 6 tasini izlashimiz mumkin.

Natijada, bizda regexp mavjud: /#[a-f0-9]{6}/gi.

let regexp = /#[a-f0-9]{6}/gi;

let str = "color:#121212; background-color:#AA00ef bad-colors:f#fddee #fd2";

alert(str.match(regexp)); // #121212,#AA00ef

Muammo shundaki, u rangni uzunroq ketma-ketlikda topadi:

alert("#12345678".match(/#[a-f0-9]{6}/gi)); // #123456

Buni tuzatish uchun oxiriga \b qo’shishimiz mumkin:

// rang
alert("#123456".match(/#[a-f0-9]{6}\b/gi)); // #123456

// rang emas
alert("#12345678".match(/#[a-f0-9]{6}\b/gi)); // null
Oldingi darsKeyingi dars
Ulashish
O'quv qo'llanma xaritasi

Izohlar

izoh berishdan oldin buni o'qing…
  • Agar sizda nimani yaxshilash kerakligi haqida takliflaringiz bo'lsa - iltimos, GitHub muammosini yuboring yoki izoh berish o'rniga so'rov yuboring.
  • Agar siz maqolada biror narsani tushunolmasangiz - iltimos, batafsilroq ma'lumot bering.
  • Bir nechta so'z so'zlarini kiritish uchun <code> yorlig'ini ishlating, bir nechta satrlar uchun - ularni <pre> yorlig'i bilan o'rab qo'ying, 10 satrdan ortiq bo'lsa - sandbox (plnkr, jsbin, codepen…)
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.