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\dbilan bir xil.Quyidagi misol 5 xonali raqamni qidiradi:
alert( "I'm 12345 years old".match(/\d{5}/) ); // "12345"Uzunroq raqamlarni chiqarib tashlash uchun
\bqoshishimiz 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 uzunligi3yoki 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?rnaqshiodan keyin nol yoki bittau, keyinrni qidiradi.Shunday qilib,
colou?rhamcolorhamcolourni 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, 1Uni
+(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>.
-
Eng oddiyi:
/<[a-z]+>/ialert( "<body> ... </body>".match(/<[a-z]+>/gi) ); // <body>Regexp
'<'belgisini, keyin bir yoki kop lotin harflarini, keyin'>'ni qidiradi. -
Yaxshilangan:
/<[a-z][a-z0-9]*>/iStandartga 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>
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.
Izohlar
<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)