[ Web Proxy ]
URL:
Viewing: https://uz.javascript.info/regexp-quantifiers [Back]  [Original]

Miqdorchilar +, *, ? va {n}
UZ

Ushbu ochiq manbali loyihani butun dunyo bo'ylab odamlar uchun taqdim etmoqchimiz.

Ushbu qo'llanmaning mazmuni sizning tilingizga tarjima qilishga yordam bering!

    Javascript.info saytidan qidirish:
    O'quv qo'llanmasidan qidiring:
    Light themeDark theme
    DanskEnglishEspaolFranaisIndonesiaItalianoTrkeOzbek

    Miqdorchilar +, *, ? va {n}

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

    Raqam bu 1 yoki undan kop raqamlar ketma-ketligi \d. Qanchasi kerakligini belgilash uchun miqdorchi qoshishimiz mumkin.

    Miqdor {n}

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

    Miqdorchi belgi (yoki belgilar sinfi, yoki [...] toplam va hokazo)ga qoshiladi va qancha kerakligini belgilaydi.

    Uning bir nechta ilgor shakllari bor, misollarni koraylik:

    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 qoshishimiz mumkin: \b\d{5}\b.

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

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

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

    Yuqori chegarani tashlab qoyishimiz mumkin.

    Keyin \d{3,} regexp uzunligi 3 yoki undan kop 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 kop 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

    Kop ishlatiladigan miqdorchilar uchun qisqartmalar mavjud:

    +

    Bir yoki kop 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 kop degani, {0,} bilan bir xil. Yani belgi istalgan marta takrorlanishi yoki umuman bolmasligi mumkin.

    Masalan, \d0* raqamdan keyin istalgan miqdordagi nollarni qidiradi (kop yoki hech bolmasligi mumkin):

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

    Uni + (bir yoki kop) bilan solishtiring:

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

    Koproq misollar

    Miqdorchilar juda tez-tez ishlatiladi. Ular murakkab doimiy ifodalarning asosiy qurilish bloki vazifasini bajaradi, shuning uchun koproq misollarni koraylik.

    Onli 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 kop lotin harflarini, keyin '>' ni qidiradi.

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

      Standartga kora, HTML teg nomi birinchisidan tashqari istalgan pozitsiyada raqamga ega bolishi 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 /? qoshdik. Uni teskari chiziq bilan ekranlashga togri keldi, aks holda JavaScript uni naqsh oxiri deb oylaydi.

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

    Bu misollarda umumiy qoidani korishimiz mumkin: doimiy ifoda qanchalik aniq bolsa shunchalik uzun va murakkab.

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

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

    Haqiqiy hayotda ikkala variant ham qabul qilinadi. Bu qoshimcha mosliklarga qanchalik toqat qilishimiz va ularni boshqa usullar bilan natijadan olib tashlash qiyin yoki yoqligiga bogliq.

    Vazifalar

    muhimlik: 5

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

    Tekshiring:

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

    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.

    #ABCDEF sifatida yozilgan HTML ranglarini qidirish uchun regexp yarating: avval # va keyin 6 on 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.

    yechim

    Biz # dan keyin 6 on oltilik belgini izlashimiz kerak.

    On oltilik belgini [0-9a-fA-F] deb tariflash mumkin. Yoki i bayrogidan 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 qoshishimiz mumkin:

    // rang
    alert("#123456".match(/#[a-f0-9]{6}\b/gi)); // #123456
    
    // rang emas
    alert("#12345678".match(/#[a-f0-9]{6}\b/gi)); // null
    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)

    Web Proxy Viewer  |  New URL  |  Original Page