Internet Derazalar Android
Kengaytirmoq

Muntazam ifodalar. Oddiy iboralar (RejExp ob'ekti) Shaklni muntazam ravishda JavaScript-dagi iboralarni tekshiring

Doimiy ifodalar - Bu metilimmbollarga asoslangan qator naqshlarini tasvirlaydigan til. Metasimwall - bu ba'zi bir sinf belgilari sinfini tasvirlaydigan oddiy iboraning ramzi, substratikaning pozitsiyasini ko'rsatadi, substratura yoki substratsiyadagi guruh belgilari sonini ko'rsatadi. Masalan, Metacimoly \\ D raqamlarini tasvirlaydi va $ satrning oxirini belgilaydi. Oddiy ifoda etishda o'zlarini tasvirlaydigan an'anaviy belgilar bo'lishi mumkin. Oddiy iboralarda metimvolsning belgilangan va qiymati PCRE Stanksiyasini tavsiflaydi, ularning aksariyati JS-da qo'llab-quvvatlanadi.

Muntazam ifoda etish hajmi

Oddiy iboralar, qoida tariqasida, quyidagi vazifalar uchun ishlatiladi:

  • Taqqoslash. Ushbu vazifaning maqsadi belgilangan muntazam muntazam ifoda belgilangan matnga mos kelishini bilib oladi.
  • Qidirmoq. Oddiy iboralar yordamida tegishli substratsiyani topish qulay va matndan ularni chiqarib olish qulay.
  • Almashtirish. Oddiy iboralar ko'pincha nafaqat topishga yordam beradi, balki muntazam ifodaga mos keladigan substing matnida ham almashtirishadi.

Oxir oqibat, oddiy iboralar bilan, masalan:

  • Shaxsiy ma'lumotlar shaklni to'ldirishni tekshiring.
  • Xabarga keyingi avtomatik biriktirma uchun ushbu avtomatik biriktirma uchun foydalanuvchi kirish matnini toping.
  • HTML teglari matnidan olib tashlang.
  • Oddiy sintaktik xatolar mavjudligini kompilyatsiya qilishdan oldin kodni tekshiring.

JS-dagi oddiy iboralar xususiyatlari. Oddiy iboralar

JS-dagi oddiy iboralarning asosiy xususiyati shundaki, ular uchun bir xil tur mavjud. Takliflar qatoriga kiradigan satrlar, muntazam ifodalar bo'yicha muntazam ravishda tozalash vositalarlari (/). Shunday qilib, JS kodi shaklning ifodalari bo'lishi mumkin:

konsol.log (turiof / Tcoder /); // ob'ekt.

Aslida, satrda aniqlangan oddiy ibora

var-pasy \u003d yangi RejExp ("TCODER");

Ushbu yaratish usuli odatda o'zgaruvchilardan muntazam ravishda ifodalashda foydalanish kerak bo'lganda ishlatiladi yoki doimiy ravishda dinamik ifoda etadi. Boshqa barcha holatlarda muntazam iboralar qisqaroq sintaksis va ba'zi belgilarni qo'shimcha ravishda himoya qilish zarurligi tufayli qo'llaniladi.

Oddiy iboralardagi belgilar

Oddiy iboralardagi barcha harf-raqam belgilari metasimvolv emas va o'zlarini tasvirlab berishadi. Bu muntazam ifoda degan ma'noni anglatadi / tcoder / Bu subder substerga mos keladi. Oddiy iboralarda, shuningdek alifbo belgilarini ko'rsatmaslik, masalan: satrni (\\ n) tarjima qilish (\\ t) va boshqalar. Bu belgilarning barchasi o'zlariga ham mos keladi. Alifbo ramzidan oldin etkazib beriladigan teskari (\\) bunday bo'lsa, agar shunday bo'lsa, uni metachakka aylantiradi. Masalan, "D" alifbo belgisi sonlar (\\ d) bilan oldindan taxmin qilinsa, metrashamirga aylanadi.

Belgilar darslari

Oddiy iboralarda bitta belgilar kvadrat qavs yordamida sinflarga guruhlarga bog'lanishi mumkin. Shu tarzda yaratilgan sinf bunga kiritilgan har qanday belgilarga mos keladi. Masalan, muntazam ifoda // "T", "C", "O", "D", "E", "R" harflari mos keladi.

Sinfda siz defis yordamida belgilar oralig'ini ham belgilashingiz mumkin. Masalan, sinf sinfga mos keladi. E'tibor bering, oddiy iboralarda ba'zi belgilar belgilarini tasvirlaydi. Masalan, Metacimol \\ D sinfga teng. E'tibor bering, belgilar sinflarini tavsiflovchi metimaraterlar sinflarga kiritilishi mumkin. Misol uchun, sinf [\\ Da-F] raqamlar va harflar "A", "B", "D", "E" ga mos bo'lib, "F", har qanday hexadecimal belgi.

Shuningdek, belgilar sinfini tasvirlash qobiliyati, uni kiritmasligi kerak bo'lgan belgilar ko'rsatilgan. Bu metavol ^ yordamida amalga oshiriladi. Masalan, sinf [^ \\ d] har qanday belgiga mos keladi.

Takrorlamoq

Endi biz, har qanday uzunlik o'nlik sonini, shunchaki metamovololol \\ d, bu raqamda qancha raqamlar yozish orqali tasvirlab berishimiz mumkin. Ushbu yondashuv unchalik qulay emasligiga rozi bo'ling. Bundan tashqari, biz kerakli miqdordagi takroriylar doirasini tasvirlay olmaymiz. Masalan, biz raqamni bir yoki ikkita raqamdan tasvirlay olmaymiz. Yaxshiyamki, oddiy iboralarda metasimvollar yordamida takrorlash diapazoni tasvirlashi mumkin. Buning uchun, ramzdan keyin jingalak qavslarda takrorlash oralig'ini aniqlash kifoya. Masalan, muntazam ifoda / Tco (1, 3) der / "TCoder", "Tcoooo" va "Tcoder" satrlari mos keladi. Agar siz hech qanday takrorlashlarning maksimal sonini tark qilsangiz, vergulni qoldirib, minimal sonni qoldiring, shunda siz takrorlashlar sonini aniqlang. Masalan, muntazam ifoda / Bo (2,) BS / "Boobs", "Boods", "BooOBs" satrlari, "O" harflari bilan kamida ikkitasi mavjud bo'ladi.

Agar jingalak qavslashmalar va vergulli bo'lsa, shunchaki bitta raqamni belgilash, keyin takrorlashning aniq sonini belgilaydi. Masalan, muntazam ifoda / \\ d (5) / Besh xonali raqamlarga mos keladi.

Ba'zi takrorlash diapazoni juda tez-tez ishlatiladi va ularning belgilari uchun ularning metachilari mavjud.

Ochko'z takroriy

Yuqoridagi sintaksis takrorlashlarning maksimal sonini tavsiflaydi, ya'ni ma'lum bir oralig'ida joylashgan bo'lishi mumkin bo'lgan barcha takrorlanishlar sonini, belgilangan oraliqda joylashgan. Maksimal tanlangan. Bunday takrorlashlar ochko'z deb ataladi. Bu shuni anglatadiki, muntazam ifoda / \\ d + / / l chizig'ida "111" va "1" emas, balki "+" bir xil takrorlashni tasvirlaydi.

Agar siz noaniq takrorlashni amalga oshirishni xohlasangiz, belgilangan diapazondan minimal miqdordagi takrorlashlar mavjud, so'ngra oddiy ramzni qo'ying. Takrorlash oralig'idan keyin. Masalan, muntazam ifoda / \\ D +? / Ketma-ket "Ha !! 111" substrat va oddiy ifodaga mos keladi / \\ d (2,) / Xuddi shu qatorda quyi "11" substraturaga mos keladi.

Kamtar takrorlanishning muhim xususiyatiga e'tibor berishga arziydi. Muntazam ifoda etishni ko'rib chiqing / bo (2,)? BS /. "Menga katta Boooobs" qatorida, ochko'z takrorlash, pivoobs substing, pueoobs substratsiyasi va u o'ylash mumkin bo'lgan kabi. Gap shundaki, bitta taqqoslash bilan oddiy ifoda satrning turli joylarida joylashgan bir nechta substingga mos kelmaydi. Ya'ni, bizning odatiy ifoda "boo" va "BS" substratsiyasiga mos kelmaydi.

Alternativa

Oddiy iboralarda alternativalardan foydalanish mumkin - oddiy iboraning bir yoki boshqa qismiga mos keladigan qatorlarni tasvirlash uchun. Bunday qismlar alternativa deb ataladi va vertikal xususiyatga bo'linadi. Masalan, muntazam ifoda / Ikkitasi | Ikki marta | \\ 2 / Bu "ikkita" almashtirish yoki "ikki marta" substratsiya yoki pastki chiziqli "2" ga to'g'ri kelishi mumkin. Muqobil zanjir birinchi tasodifdan oldin chapga va u faqat bitta alternativa tasvirlangan subtrektiyaga mos kelishi mumkin. Masalan, muntazam ifoda / Java | Script / "Menga JavaScript yoqadi" liniyasi faqat "Java" substratsiyasiga mos keladi.

Guruhlash

Takrorlash maydonchalaridan foydalanganda bir nechta belgilarni ko'rib chiqish, boshqalarning hammasi, ularni qavslarga olib borish kifoya. Masalan, muntazam ifoda / Haqiqiy (koder)? / "TRUECODER" va "TRUE" torlari mos keladi.

Martaba

Bundan tashqari, dumaloq qavslar ramzlarni muntazam ravishda bitta to'liq bir butunga birlashtiradi, shunchaki chap qavs sonini uning qavslari juftligidan joylashtirish orqali tegishli substingga murojaat qilishingiz mumkin. Qavslar chapdan o'ngga qadar raqamlangan. Masalan, muntazam ravishda / (Bitta (ikkita) (to'rt) / \\ 1 bitta "ikkita", \\ 3 "uchta", "to'rtta" da "to'rtta" da "" Uchta "," to'rt "da" to'rtta ". Bunday aloqalardan foydalanishning misoli sifatida biz muntazam ravishda ifoda edik / (\\ d) \\ 1 /bir xil raqamlar bilan ikki raqamli raqamlarga to'g'ri keladi. Backlinksdan foydalanishning muhim cheklovi shundaki, ular darslarda foydalanishni ishlatishning muhimligi, masalan, turli raqamlarning turli raqamlari bilan ikki raqamli raqamni tasvirlab berishadi / (\\ d) [^ \\ 1] / Bu mumkin emas.

Qo'riqchi qavslar

Ko'pincha belgilarni shunchaki guruhlash uchun kerak, ammo havolani yaratishning hojati yo'q. Bunday holda, siz chap guruhning qavsidan keyin darhol yozishingiz mumkinmi? :. Masalan, muntazam ravishda / (Bir ikki uch) / \\ 2 Uchtaga ishora qiladi.

Bunday qavslar ba'zan chaqirilmagan deb nomlanadi. Keyingi darsda biz gaplashadigan yana bir muhim xususiyatga ega.

Eslatma holati

Oddiy iboralarda, shuningdek, pozitsiyani ko'rsatadigan metashimlar ham mavjud. Qolgan barcha belgilarga qaraganda ko'proq ^, $ chiziqning boshlanishini va oxirini ko'rsatuvchi. Masalan, muntazam ifoda /\..+$/ fayllarning nomlarini kengaytirish va oddiy ifodaga mos keladi / ^ \\ d / Agar bor bo'lsa, satrda birinchi raqam.

Ijobiy va salbiy egilgan cheklar

Oddiy iboralar yordamida siz pastki shablonni yoki boshqa shablon tomonidan tavsiflangan substing yoki substratsiyani tasvirlashingiz mumkin. Masalan, biz "script" dan faqat java so'zini topishimiz kerak. Ushbu vazifa muntazam ifoda bilan hal qilinishi mumkin / Java (? \u003d skript) /. Agar biz "Java" substratsiyasini tasvirlab berishimiz kerak bo'lsa, skript muntazam ravishda ishlatilmasligi kerak / Java (?! skript) /.

Biz yuqorida aytib o'tgan hamma narsani bitta plastinkada yig'amiz.

Belgi Qiymati
a | B. Yoki yoki yoki.
(…) Qavslar guruhi. Shuningdek, substratsiyada qavs ichida tegishli naqshni havola qilish mumkin.
(?:…) Faqat guruhlash, murojaat qilish imkoniyatisiz.
\\ N. N-M-shablonga mos keladigan substingga havola.
^ Kiritish ma'lumotlarining boshlanishi yoki satrning boshlanishi.
$ Kirish ma'lumotlari yoki satrning oxiri.
a (? \u003d b) Shablon b substratsiyasiga rioya qilgan bo'lsa, uni faqat shablonni tavsiflovchi substingga mos keladi.
a (?! B) Agar u shablonni faqat u bo'lsa, unda mos keladi emas U shablon tomonidan tavsiflangan substratsiyaga amal qiladi.

Bayroqchalar

Va nihoyat, muntazam iboralar sintaksisining oxirgi elementi. Bayroqlar to'liq ifodaga tegishli bo'lgan muvofiqlik qoidalarini o'rnatadi. Boshqa elementlardan farqli o'laroq, ular tom ma'noda yozilgan oddiy iboralar sintaksisi yoki tom ma'noda yozilgan yoki chiziq konstruktorining ikkinchi parametri sifatida uzatiladi RegExp..

JavaScript Oddiy ifodalarning faqat uchta bayroqlari mavjud:

i. - Ushbu bayroqni belgilashda registr hisobga olinmaydi, ya'ni, masalan, muntazam ifoda \\ JavaScript \\ i Satrlar "JavaScript", "JavaScript", "JavaScript", "JavaScript" va boshqalar sozlanadi va hk.

m. - Ushbu bayroq ko'p chiziqli qidiruvni o'z ichiga oladi. Bu shuni anglatadiki, agar matnda xarakterli tarjima belgilari mavjud bo'lsa va ushbu bayroq etkazib beriladi, belgilar va har bir matnning oxiri har bir qatorning boshiga va oxirigacha. Masalan, muntazam ifoda / Line $ / m "Birinchi qator" qatorida va bitta \\ nsekund liniyasida "chiziq" substratsiyasiga javob beradi.

g. - global qidiruvni o'z ichiga oladi, ya'ni muntazam ifoda, agar bayroq yoqilgan bo'lsa, unga to'g'ri keladi va bu bayroq unday emas, balki birinchi navbatda mos keladi.

Bayroqlar o'zboshimchalik bilan birlashtirilishi mumkin, ya'ni \\ Tcoder \\ mi, \\ Tcoder \\ gim, \\ GMI \\ GMI va boshqalar, bu bir xil. Bayroqlarning tartibi ob'ektda ob'ekt konstruktori sifatida satrda uzatilgan bo'lsa, muhim emas RegExp., ya'ni yangi RejExp ("TCODER", "IM") va yangi RejExp ("TCODER", "IM") Shuningdek, bitta narsa.

Zy

Oddiy iboralar, qatorlar bir ifodaga yuzlab kod satrlarini kamaytirishga imkon beradigan qatorlar bilan ishlash uchun juda kuchli va qulay vositadir. Afsuski, ularning sintaksisi ba'zan juda murakkab va qiyin va hatto tajribali ishlab chiqaruvchi, agar izoh bermasa, u bir necha kun oldin yozgan muntazam ifoda nazarda tutilganligini unutishi mumkin. Shu sabablarga ko'ra, ba'zan chiziqlar bilan ishlash uchun odatdagi usullar bo'yicha muntazam ravishda ifodalanishga arziydi.

Oddiy iboralar ( RegExp.) - Bu qatorlar bilan ishlash juda samarali usul.

Siz o'zingiz mumkin bo'lgan maxsus sintaksis yordamida muntazam ifodani xaritalash:

  • matnni qidirish mos ravishda
  • subtrlashni almashtiring mos ravishda
  • ma'lumotni olib tashlash Satrdan

Deyarli barcha dasturlash tillari muntazam ifodalarga ega. Amalga oshirishda kichik farqlar mavjud, ammo umuman hamma joyda umumiy tushunchalar qo'llaniladi.

Oddiy iboralar 1950-yillarga nisbatan satrlarni qayta ishlash algoritmlari uchun kontseptual qidiruv shabloni sifatida rasmiylashtirilganda.

Grep, Sed va mashhur matn muharrirlari kabi oddiy iboralar, masalan, ommalashib, Perl dasturlash tiliga va keyinchalik boshqa tillarda qo'shila boshladi.

JavaScript, Perl bilan birga bu dasturlash tillaridan biri bo'lib, unda oddiy iboralar yordamida to'g'ridan-to'g'ri tilda qurilgan.

Qiyin, foydali

Nahotlarning muntazam ifodalari mutlaqo bema'niliklarga o'xshaydi va hatto professional ishlab chiqaruvchilar, agar investitsiya qilmasa, ularning tushunishlari uchun zarurdir.

Doimiy ifodalar yozish qiyin, o'qish qiyin va saqlash yoki o'zgartirish qiyin.

Ammo ba'zida oddiy iboralar yagona oqilona usul Qatorlar ustidagi ba'zi manipulyatsiyani bajaring, shuning uchun ular juda qimmatli vositadir.

Ushbu qo'llanma sizga JavaScript-dagi muntazam iboralar haqida muntazamlik va muntazam ravishda o'qish va yaratish to'g'risida ma'lumot berishning eng oson usuli sizga qaratilgan.

Empirik qoida bu oddiy muntazam ifodalar o'qish va yozish uchun oddiy., shu bilan birga murakkab muntazam iboralar tezda tartibsizlikka aylanishi mumkinAgar siz asoslarni chuqur tushunmasangiz.

Muntazam ifodalar nimaga o'xshaydi

JavaScript-da, muntazam ifodalar - bu ikki jihatdan aniqlanishi mumkin bo'lgan ob'ekt.

Birinchi yo'l yaratishdir yangi RegExp ob'ekti Dizayner yordamida:

Const re1 \u003d yangi regexp ("hey")

Ikkinchi yo'ldan foydalanish oddiy iboralar:

Const re1 \u003d / hey /

Siz u erda JavaScriptda nima borligini bilasiz tom ma'noda ob'ektlar va tengliklarning massivlari? Unda ham bor regExpda tomirlar.

Yuqoridagi misolda, hey deyiladi shablon. Talklar shaklida, bu ikkita silkitiladi va ob'ekt dizayneri bo'lsa, yo'q.

Bu, keyinchalik ko'rib chiqadigan dam olishning oxirgi iboralarini aniqlashning ikki usuli o'rtasidagi birinchi muhim farq.

Ular qanday ishlaydi?

Oddiy ifoda, biz yuqorida aniqlanganimizni re1 juda oddiy. Bu menda hech qanday cheklovlarsiz ey ipni qidiradi: satrda juda ko'p matn bo'lishi mumkin va u erda uyning o'rta va muntazam ifodasi ishlaydi. Satrda faqat Hey so'zini o'z ichiga olishi va muntazam ravishda yana ishlaydi.

Bu juda oddiy.

Siz mantiqiy (Boolean) qiymatini qaytaradigan regexp.Test (torli) usulidan foydalanib muntazam ifodani sinab ko'rishga harakat qilishingiz mumkin:

Re1.test ("hey") // re1.Test ("Blababla Hey Blalablala") // ✅ re1.Test ("u") // Reftlagest ("Blababla") // ❌

Yuqoridagi misolda biz shunchaki re1da saqlanadigan oddiy iboraning "Hey" naqshini tekshiramiz.

Bu oddiydan osonroq, lekin siz oddiy iboralar haqida ko'p narsalarni bilasiz.

Tuzatish

/ Hey /

bu satr ichida hey qayerda bo'lsa, u mustaqil ravishda ishlaydi.

Agar siz hey bilan boshlanadigan chiziqlarni topmoqchi bo'lsangiz, unda operatordan foydalaning ^:

/^/.Test ("Hey") // ✅ / ^ hey /Test ("BLA HEL") // ❌

Agar siz Heyda tugagan qatorlarni topishni xohlasangiz, so'ng operatordan foydalaning:

/hey №/.Test ("Hey") // ✅ / bla hey ") // ✅ / ✅ ✅✅

Oldingi ikkita operatorni birlashtirib, siz hey bilan to'liq mos keladigan satrni topishingiz mumkin:

/^hee$/.test uqu (tuting) // ✅

Bir substing bilan boshlanadigan satrni topish uchun va siz tugatish tasdiqchidan foydalanishingiz mumkin. *, Bu 0 yoki undan ko'p marta takrorlanadigan har qanday ramz bilan to'g'ri keladi:

/^hey.* yujoe _Test ("Hey Joe") // ✅ / ^ hey. * Djo $ / Hey Sinov ("Heyjaoe") // ✅ / ー/jee.*Testoe Qanday qilib Joe ") // ✅ / ー/joe.*Heye$/.Testh(( Joe!"

Elementlarni diapazon bo'yicha qidirish

Muayyan ipni qidirish o'rniga, siz belgilar oralig'ini belgilashingiz mumkin, masalan:

////// a, b, c, z // // a, b, z // A, C, b, b, b, b, b, z // / a / 0, 1, 2, 3, ..., 8, 9

Ushbu muntazam ifodalar tanlangan diapazondan kamida bitta belgidan iborat qatorlarni o'z ichiga oladi:

//.test( ** ✅ //.Test( kiriting // ❌ //.Test( */ ❌ // ❌ // .Test ("DC") // ✅

Ranglar birlashtirish mumkin:

// //.test( ** ✅ //.Test( kiriting // ✅ //._Testh(

Orom elementining bir nechta tasodiflarini qidiring

Siz satrni belgi yordamida faqat bitta belgidan iboratligini tekshirishingiz mumkin -:

/ ^ $ / / ^ $ /. Sinov ("A") // ✅ / _Test ("AB") // ❌

Shablonni inversiya qilish

Shablonning boshida belgisi uni chiziqning boshiga bog'laydi.

Ushbu belgi yordamida diapazonni o'zgartiradi, shunda:

/ [I-za-z0-9] /. Test ("A" / [i Ama-za-z0-9] /. Sinov ("1") // ^ a-za - Z0-9] /. Sinov ("A") // ❌ / [i Ama-za-z0-9] /. Test ("@") // ✅

Metralar

  • \\ D har qanday raqamga teng bo'lgan
  • \\ D har qanday belgi bilan bir-biriga to'g'ri keladi [^ 0-9] ga teng emas
  • \\ w har qanday harf-raqam belgisi bilan mos keladi
  • \\ W har qanday belgi bilan bir-biriga to'g'ri keladi [^ a-za-z0-9] ga tenglashtirilgan.
  • \\ Har qanday kosmik ikonka bilan to'g'ri keladi: bo'sh joy, yorliq, yangi qatorning ramzi va Unicode
  • \\ S bo'sh bo'lmagan har qanday belgi bilan to'g'ri keladi
  • \\ 0 null bilan to'g'ri keladi
  • \\ n yangi liniya belgisi bilan to'g'ri keladi
  • \\ tish yorliq ramzi bilan mos keladi
  • \\ Uxxxx xxxx kodi bilan Unicode belgisi bilan to'g'ri keladi (u bayroq talab qilinadi)
  • . Har qanday belgi bilan to'g'ri keladi, yangi satr (masalan, \\ n) dan tashqari (agar siz bayroqni ishlatmasangiz, keyinroq izohlang)
  • [^] Har qanday belgi bilan, shu jumladan yangi satr belgisi bilan bir-biriga mos keladi. Ko'p chiziqli satrlar bilan ishlashda foydali

Oddiy iboralarda tanlov

Agar birini tanlamoqchi bo'lsangiz yoki Boshqa satr, Operatordan foydalaning | .

/hy|ho/.Testy(// ✅ / ✅ / ✅✅| ") // ✅

Miqdoriy vositasi

Tasavvur qiling, siz oddiy ifodaingiz bor, bu faqat bitta raqamdan iborat bo'lgan satringiz:

Siz foydalanishingiz mumkin miqdoriy vositasi ? bu ramzni ixtiyoriy qiladi. Bizning holatimizda, raqam 0 yoki 1 marta takrorlanishi kerak:

ammo muntazam iborani bir nechta raqamga ega bo'lishini istasak nima bo'ladi?

Siz buni +, *, (n) va (n, m) dan foydalanishingiz mumkin.

+

Bir yoki bir nechta (\u003d 1) elementlarga to'g'ri keladi (\u003d 1)

/ ^ \\ D + $ / / / D + $ // № / ^ \\ d + ^ \\ ^ \\ ^ \\ ^ \\ $ /. Sinov ("144343") // ✅ / ^ \\ d + $ /. Sinov ("") // ❌ / ^ \\ d + $ /. Sinov ("1a") //

*

0 yoki undan ko'p (\u003e \u003d 0) elementlarga to'g'ri keladi:

/ ^ \\ d + $ / ^ \\ / / ^ \\ \\ d.\\ d.\\ d.\\ d * $ /. /. ") // ✅ / ^ \\ d * $ /. Sinov (" ") // ✅ / ^ /.:/ ❌

(N)

N elementlar soniga to'g'ri keladi:

/ ^ \\ d (3) $ / / / / / / / / //✅ / ^ \\ d (3) /. Sinov ("12") // ❌ / \\ D (3) $ /. Sinov ("1234") // ❌ /^( /.3/.test ("ABC") // ✅

(N, m)

N uchun n gacha bo'lgan daraja oralig'iga to'g'ri keladi:

/ ^ \\ D (3.5) $ / / ^ d ("123") // ✅ / ^ \\ d ("21234") // ✅ / ^ \\ d (3,5) $ /. [2345 ") /// ✅ / ^ d (3,5) $ /. Sinov (" 123456 ") // ❌

m Ikkinchi cheklovni cheklovlarsiz qoldirib, kamida n elementlar bo'lishi uchun qoldirilishi mumkin:

/ ^ \\ d (3,) $ / / ^ d (3,). // ❌ / ^ \\ ^ \\ d (3,). /. Test ("123) // ②/ ^ / ^ \\ d (3.12345 ») // ✅ / ^ d (3,) $ /. Test (" 123456789 ") // ✅

Ixtiyoriy elementlar

Keyingi belgi elementmi? , ixtiyoriy qilib oling:

/ ^ \\ D (3) \\ w? $ / / \\ D (3) \\ w (3). Sinov ("123) // \\ w / d (3) \\ W? 123a ") // ^ \\ d (3) \\ w? Sinov (" 123AB ") //

Guruhlar

Qavslar yordamida siz belgi guruhlarini (...) yaratishingiz mumkin.

Quyidagi misol, 3 ta raqamning aniq bir tasodifini qidirmoqda, undan keyin bir yoki bir nechta harf-raqam belgilari:

/ ^ (\\ d (3)) (\\ W (d (3) (\\ w (3)) /. Sinov ("123) // ③ / ^ (\\ d (3)) (\\ d (3)) ( \\ W) $ // test ("123s") ///// dona / ^ ("223SOMMOM") // ✅ / ^ (3)) (\\ w) $ /. Test ("1234") // ✅

Qavslar guruhi yopilgandan keyin topilgan belgilar butun guruhga tegishli:

/ ^ (\\ d (2)) + $ / ^ (\\ d (2)) + $ // ✅ / ^ (\\ d (2)) + $ / ("123") ) // / ^ / ^ (\\ d (2)) + /. Test ("1234") // ✅

Rasmga tushirish guruhi

Hozircha biz liniyalarni qanday sinovdan o'tkazishni va aniq shablonni o'z ichiga olganligini tekshirib ko'rdik.

Muntazam ifodalarning ajoyib imkoniyatidir chiziqning ma'lum qismlarini ushlang Va ularni bir qatorga joylashtiring.

Siz buni guruhlar yordamida yoki ehtimol bilan qilishingiz mumkin rasmga tushirish guruhi.

Sukut bo'yicha guruhlar ushlandi. Endi mantiqiy qiymatni qaytaradigan regexp.Test (satr) dan foydalanishning o'rniga, quyidagi usullardan birini foydalanamiz:

  • Satr.mach (REGEXP)
  • Regexp.Exec (satr)

Ular mutlaqo bir xil va ikkalasi ham birinchi element sifatida birinchi element sifatida va har bir guruh uchun tasodifning boshqa elementlarida bir qatorni qaytaradilar.

Agar tasodif topilmasa, u nullni qaytaradi.

"123S" .Match (/ \\ d (\\ d (\\ d (\\ d (\\ d) ("123S", "123", "123", "123"] (\\ \u200b\u200bd (3)) W +) $ ("123s") // Array ["123", "Hey | Ho" / "Hey", "Hey", "Hey"] /(: "Hey", "Hey | Ho" /. "Hey!" /.

Guruh bir necha bor mos kelganda, keyin faqat oxirgi qiymat qaytarilgan massiliga qo'shiladi.

"123456789" .Match (/ (\\ d) + //) ["123456789", "9"]

Ixtiyoriy guruhlar

Kasbiy guruhlarni ixtiyoriy ravishda amalga oshirish mumkin (...)? . Hech narsa topilmasa, aniqlanmagan element qaytarilgan massiliga qo'shiladi:

/ ^ (\\ D (3)))) (\\ w) $ ("23 S") // Arri ["123 S", "123", "", "", "" (123 »,» (^)) / ^ ( \\ d (3)) (\\ w) $ /. ("123s") // massivi ["123", "123", "S", "S"]

Guruhga havola

Har bir topilgan guruh raqamga tayinlanadi. $ 1 Birinchi elementga, ikkinchisiga $ 2 va hokazolarni anglatadi. Bu chiziqning bir qismini almashtirish haqida gap ketganda foydalidir.

S deb topilgan rasm

Bu New ES2018 xususiyati.

Guruhga faqat qaytish massividagi uya emas, balki ism berish mumkin:

Const re \u003d / (? \\ D (4)) - (? \\ D (2)) - (? \\ D (2)) / Conste Natie \u003d Re.Exec ("2015-01-02") // natija.groups.Year \u003d\u003d\u003d "2015"; // natijasi.group /\u003d\u003d 01 "; // natija.groups. kun \u003d\u003d\u003d 02 ";

O'yin va guruhlarsiz bajaring

Guruhlarsiz o'yin va nusxadan foydalanishda farq bor: birinchi elementda massila to'liq topilmaydi, lekin to'g'ridan-to'g'ri tasodif emas:

/hy|ho/.exec( yoki// ["Hey ho", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "Hey", "hoy "]

Lipped guruhlari

Odatiy guruhlar ushlanganligi sababli, biz qaytarilgan qatorlarda ba'zi guruhlarni e'tiborsiz qoldirish usuliga muhtojmiz. Bu mumkin skragan guruhlarkim bilan boshlanadi (?: ...).

"123S" .Match (/ \\ d (\\ d (\\ d) (\\ W (\\ s) // NULL "123 S" (/ \\ d (\\ d)) (? 3)) (? : \\ s) (\\ W +) $ // massiv ["123 S", "123", "S"]

Bayroqchalar

Siz har qanday oddiy iboralarda quyidagi bayroqlardan foydalanishingiz mumkin:

  • g: global miqyosda tasodiflarni qidirmoqda
  • i: Ro'yxatdan o'tishga sezgir bo'lmagan muntazam ifoda qiladi
  • m: Ko'p chiziqli rejimni o'z ichiga oladi. Ushbu rejimda ^ va $ butun satrning boshlanishi va oxiri bilan to'g'ri keladi. Ushbu bayroqsiz, ko'p chiziqli iplar bilan ular har bir qatorning boshlanishi va oxiri bilan birlashadilar.
  • u: Unicode qo'llab-quvvatlashini o'z ichiga oladi (ES6 / ES2015 ga qo'shilgan)
  • s: (ES2018-da) "bitta chiziq" ni kamaytirish imkon beradi. Yangi liniya belgilari bilan tasodifiy

Bayroqlar birlashtirilishi mumkin, shuningdek, ular tom ma'nodagi chiziq oxiriga qo'shilgan:

/hey/ig.test( yoki men ✅

yoki RegExP ob'ekt konstruktorida ikkinchi parametr bilan uzatiladi:

Yangi RegExp ("Hey", "IG"). Sinov ("Hey") // ✅

Oddiy iboralar inspektsiyasi

Siz oddiy iboralar xususiyatlarini tekshirishingiz mumkin:

  • manba - shablonning liniyasi
  • mulillangan bo'lsa, agar m bayroq o'rnatilgan bo'lsa
  • global - haqiqiy qiymat agar g bayroq o'rnatilgan bo'lsa qabul qilinadi
  • ishlamasa - Agar men bayroq bo'lsa, qiymat to'g'ri
  • fasindex.
/ ^ (\\ w (3)) $ / i.Source // "^ (\\\\ d (3)) (\\ w (3) $" / \\ w (\\ w (\\ w (3)) $ / I.Mulliline // Soxta / ^ (\\ w (3)) $ / i.lstindex // 0 / ^ (\\ w (westorecase // haqiqiy / dor (\\ w (3)) $ / i.global / / yolg'on

Himoya qilish

Maxsus belgilar:

Bular maxsus belgilar, chunki ular muntazam iboralar chizish paytida boshqaruv belgilaridir, shuning uchun siz shablon ichidagi tasodiflar izlash uchun ularni ishlatishni istasangiz, ularni teskari slicalning ramzi yordamida himoya qilishingiz kerak:

/ ^ \\\\ $ / / ^ \\ ^ $ / // / ^ \\ ^ Test ( "^") ✅ / ^ \\ $$ / // / ^ $ /. Sinov ( "$") ✅

Satrning chegaralari

\\ b va b so'zning boshida yoki oxirida satringiz ekanligini aniqlashga imkon bering:

  • \\ B so'zning boshida yoki oxirida belgilar to'plami bo'lsa
  • \\ B so'zning boshida yoki oxirida belgilar to'plami bo'lmasa

"Men ayiqni ko'rdim" .Match (/ \\ bbira /) "Men soqolni ko'rdim" .Match (/ \\ bbira) // massiv ["ayiqni ko'rdim" .Match (/ \\ bbee \\ b /) // NULL "Cool_Bear" .Match (/ \\ bbira \\ b / b /) // NULL

Oddiy iboralar bilan almashtirish

Shablonga mos keladigan chiziqlarni qanday tekshirish kerakligini allaqachon ko'rganmiz.

Shuningdek, biz shablonga mos keladigan qatorlarning bir qismini qanday ajratib olishni ko'rdik.

Endi qanday qilib ko'raylik chiziqning bir qismini almashtiring Shablon asosida.

JavaScript-dagi satr ob'ektida oddiy iboralarsiz ishlatilishi mumkin bo'lgan almashtirish () usuli bor bir almashtirish mos ravishda:

"Salom Dunyo!". To'xtating ("Dunyo", "It") / salom it! "Mening itim yaxshi it!" ("It", "mushuk") // mushukim yaxshi it!

Ushbu usul, shuningdek, muntazam ifodani argument sifatida qabul qilishi mumkin:

"Salom Dunyo!" O'zgartiring (/ dunyo /, it ») // Salom it!

Bayroq g bu - bu yagona yo'l Vanilya JavaScript-da ketma-ket bir nechta hodisalarni almashtiring:

"Mening itim yaxshi it!" (/ It / g, "mushuk") // mushukim yaxshi mushukdir!

Guruhlar bizga ko'proq g'alati narsalarni qilishimiz, chiziqlarning qismlarini o'zgartirishga imkon beradi:

"Assalomu alaykum!" (/ W (W +)! /, "$ 2: 1 !!!" Dunyo: "Dunyo: Salom !!!"

Satr o'rniga siz yanada qiziqarli narsalarni qilish uchun funktsiyani ishlatishingiz mumkin. Bu argumentlar soni bo'yicha navbatdagi satr usullari, masalan, satr (sribe) usullari kabi bir qator dalillarga o'tkaziladi, u erda argumentlar soni guruhlar soniga bog'liq:

"Salom, dunyo!" (/ (\\ W)! /, (Avval) (birinchi) (birinchi) (birinchi); konsol.log (ikkinchis); qaytish $ (Me'el.tupperperascper ()): $ (birinchi) !!! "" Jahon: Salom !!! "

Ochko'z

Muntazam ifodalar deyiladi ochko'z sukut.

Bu nimani anglatadi?

Masalan, muntazam ifoda edik:

/ \\ $ (. +) \\ s? /

Biz miqdorni liniyadan dollarga ekishingiz kerak deb taxmin qilinadi:

/\\$(.+) - $ 100 narxi "

ammo raqamdan keyin ko'proq so'zlar bo'lsa, u chalg'itadi

/ \\ $ (. +)) \\ s? /

Nima uchun? Chunki $ belgisi har qanday ramz bilan to'g'ri keladi. Va u chiziq oxirigacha to'xtamaydi. Keyin u to'xtaydi, chunki \\ smi? yakuniy bo'sh joyni majburiy qiladi.

Uni tuzatish uchun biz oddiy ibora bo'lishi kerakligini aniqlashimiz kerak dangasa Va eng kichik tasodiflarni toping. Buni belgi bilan qila olamizmi? Qiqlovdan keyin:

/ /$(.+?) / /S/.Exec ("Bu $ 100 dan kam xarajat qiladi, // 100 dollardan kam.

Xo'sh, ramzmi? uning holatiga qarab har xil narsalarni anglatishi mumkin, shuning uchun u miqdori va ko'rsatkich bo'lishi mumkin dangasa rejim.

Oldinda: u nimaga qarab mos keladigan satr

Foydalanishingiz kerakmi \u003d Belgilangan substratsiyaga quyidagi satrda tasodiflarni qidirish uchun

/ Roger (? \u003d Suvlar) / / / suvlar) /. Sinov ("Roger mening itim" (? \u003d Suv) /. Sinov - bu mening itim va Roger suvlari Taniqli musiqachi ") // haqiqat

Teskari operatsiyani amalga oshiradi va qaysi satrda tasodiflarni topadi emas Aniq substiya:

/ Rojer (? !! / Roger (?! «Rojer mening itim) // Haqiqat / uning itim" (! Taniqli musiqachi ") // yolg'on

Retrospekective: mos keladigan satrni mos keladigan narsaga qarab

Bu New ES2018 xususiyati.

Oldinda ramzni ishlatadimi? \u003d. Retrospektiv foydalanadimi?<= :

/(?<=Roger) Waters/ /(?<=Roger) Waters/.test("Pink Waters is my dog") //false /(?<=Roger) Waters/.test("Roger is my dog and Roger Waters is a famous musician") //true

Retrospetivlarning harakatlanishidan foydalanishmi?

/(?

Oddiy iboralar va Unicode

Unicode torlari bilan ishlashda, ayniqsa, birinchi 1600 birinchi direktorga kiritilmagan astral samolyotlarida chiziqlarni qayta ishlash kerak bo'lganda majburiydir.

Masalan, Emodi, lekin ular faqat ular.

/^$/.Test( ** ✅ / ^. Sinov ("?") // ❌ / ^. $ / U.Test ("?") // ✅

Shuning uchun, har doim u bayroqdan foydalaning.

Unicode, shuningdek oddiy belgilar, pyaperlarni qayta ishlashi mumkin:

//.test( ** ✅ //.Test( kiriting ///_Test (?) / /?] / /?] / u .Test ("?") // ❌

JavaScript ichki ko'rinishi kodlarini tekshiradi, shunday emasmi?< ? < ? на самом деле \u1F436 < \u1F43A < \u1F98A . Посмотрите полный список эмодзи чтобы увидеть коды и узнать их порядок.

Skrining xususiyatlari Unicode.

Yuqorida aytganimizdek, muntazam ifoda etishganida, siz biron bir harfdan tashqari, har qanday harf-raqam belgisida tasodifni topish uchun har qanday harfni topishingiz mumkin.

UNICode xususiyatlari ES2018 ning imkoniyatlari, bu juda ajoyib funktsiyani qo'shadi, bu kontseptsiyani eng yaxshi funktsiya qo'shadi va \\ P () va \\ p () qo'shing.

Har qanday Unicode belgisi mavjud xususiyatlarga ega. Masalan, skript tillar oilasini belgilaydi, ASCII ASCII belgilari uchun haqiqiy qiymatga teng mantiqiy qiymat va boshqalar. Siz bu xususiyatni jingalak qavslarga qo'yishingiz va oddiy ifoda uning qiymati to'g'ri ekanligini tekshiradi:

/ ^ / U_ACII) + $ / / ^ \\ ^ \\ p (ASCII) + $ / U.Test (" [Elektron pochta bilan himoyalangan]") // ✅ / ^ \\ p (SCII) + + $.Test (" ABC? ") // ❌

ASCII_HEX_DIGIT bu yana bir mantiqiy mulki - bu satrda faqat haqiqiy alkalli raqamlar mavjudmi yoki yo'qligini tekshiradi:

/ ^ / p (SCII_HEX_DIGIT) + $ / 012345889Abdef ") // ✅ / ^ \\ p_test (" h ")

Boshqa mantiqiy xususiyatlar mavjud bo'lib, ular shunchaki ismlarini jingalak qavslarga, jumladan katta, kichik harf, oq_space, alifbo, emoji va boshqalarga qo'shib tekshirishingiz mumkin:

/ ^ /U.Test("h ") // ✅ / ^ \\ p (katta) $ /U.Test("h") // ✅ / ^ \\ p (kulgichlar) + $ / U.Test ( "H ") // / ^ \\ p (emoji) + + $ / u.Test (" ?? ") // ✅

Ushbu ikkilik xususiyatlarga qo'shimcha ravishda siz maxsus qiymatga mos keladigan universitetning ramzi xususiyatini tekshirishingiz mumkin. Quyidagi misolda yunon yoki lotin alifbosidagi satr qayd etilganligini tekshiraman:

/ ^ Cro_script \u003d yunoncha) + $ / ηNest ("ELLE" / \\ \\ \\ \\ \\ p (@ lotin) + $ / hey ") // ✅

Misollar

Satrdan raqamni qazib olish

Aytaylik, olib tashlanishi kerak bo'lgan bitta raqamni o'z ichiga olgan satr mavjud. / \\ d + / Buni qilish kerak:

"Test 123123329" .Match (/ \\ d + / /) // massiv ["123123329"]

Elektron pochta manzillarini qidirish:

Eng oddiy yondashuv - @ belgisi bilan va undan keyin imonsiz belgilarni tekshirish:

/ (\\ S +) @ (\\ s +) \\ (\\ s +) @ (\\ s +) \\ (\\ s +) / (\\ s +) / bajarilgan (» [Elektron pochta bilan himoyalangan]") //["[Elektron pochta bilan himoyalangan]"," KITECC "," Gmail "," com "]

Biroq, bu soddalashtirilgan misol, chunki uning ostida haqiqiy elektron pochta manzillari mavjud.

Ikkita tirnoq orasidagi rasmni oling

Tasavvur qiling-a, siz matn mahbusni ikki marta tirnoq ichida bor va ushbu matnni olishingiz kerakligini tasavvur qiling.

Buning eng yaxshi usuli bu foydalanishdir rasmga tushirish guruhi, Chunki biz o'zimiz tasodifan boshlanishi va tugashini bilamiz ", shuning uchun biz shablonni osongina sozlashimiz mumkin, ammo biz ushbu narxlarni natijadan olib tashlashni xohlaymiz.

Natijada bizga kerak bo'lgan narsani topamiz:

Dost salom \u003d "Salom" Yaxshi gul "([_" * "*" * "*" Yaxshi gul \\ "", "chiroyli gul"]

HTML yorlig'idan tarkibni olish

Masalan, yorliq uchun har qanday dalillarni keltirib chiqaradigan span yorlig'idan tarkibni oling:

/]*>(.*?)<\/span>/ /]*>(.*?)<\/span>/.exec ("sinov") // NULL / ]*>(.*?)<\/span>/.exec ("Test") // ["Sinov", "Sinov"] / ]*>(.*?)<\/span>/.exec (" test") // ["test"," sinov "]

JavaScript-dagi regxp-klass oddiy ifoda - belgilar shablonini tavsiflovchi ob'ekt. RegExp ob'ektlari odatda quyidagi tilning maxsus sintaksisidan foydalangan holda yaratiladi, ammo konstruktor RegExp () tomonidan yaratilishi mumkin.

Sintaksis

// Maxsus tom ma'noda sintaksisdan foydalanish var regex \u003d / naqsh / bayroqlar; // dizayner bilan var regex \u003d yangi RejExp ("namunasi", "bayroqlar"); var regex \u003d yangi RejExp (/ naqsh /, bayroqlar);

Parametr qiymatlari:

Oddiy iboralar bayroqlari

BayroqTavsif
g. Birinchi tasodifdan keyin barcha tasodiflarni topishga imkon beradi ( global o'yin bayrog'i.).
i.Ro'yxatdan o'tishsiz taqqoslanmasdan ( ish bayroqini e'tiborsiz qoldiring).
m.Xaritalash bir nechta qatorlarda amalga oshiriladi. Boshlang'ich va yakuniy belgilarni (^ va $) ishlov berish, ya'ni xaritalash har bir qatorning boshlanishi yoki tugashi bilan, shuningdek, har bir qatorda (\\ n yoki \\ r bo'linuvchilarning), nafaqat boshlanishi bilan yoki butun liniyaning oxiri ( ko'p bosqichli bayroq).
u.Shablon Unicode Kod nuqtalarining ketma-ketligi sifatida qabul qilinadi ( unicode bayrog'i).
y.Xaritalash indeksda, ushbu muntazam iboraning burchining xususiyatini ko'rsatadigan indeksda sodir bo'ladi, xaritalash keyinchalik yoki erta indeksda ( yopishqoq bayroq.).

Belgi to'plamlari

Metralar

BelgiTavsif
. Sizga bitta belgini topishga imkon beradi, yoki satrning oxiri (\\ n, \\ r, \\ u2028 yoki \\ u2029).
\\ D.Asosiy lotin alifbosidagi raqamlarning ramzini topishga imkon beradi. Ekvivalentidan foydalanish belgilari to'plami.
\\ D.Asosiy lotin alifbosida raqam bo'lmagan har qanday belgini topishga imkon beradi. Belgilar to'plamiga teng [^ 0-9].
\\ S.Sizga bitta bo'sh belgi topishga imkon beradi. Kosmik belgisi ostida kosmos, jadvallar, sahifa tarjimasi, satr va boshqa globusik belgilar sifatida tushuniladi. Belgilar [\\ f \\ n \\ r \\ t \\ v \\ u00a0 \\ u1680 \\ u180e \\ u2000 \\ u2001 \\ u2002 \\ u2003 \\ u2004 \\ u2005 \\ u2006 \\ u2007 \\ u2008 \\ U2009 \\ u2008 \\ U2009 \\ u2008 \\ majmui teng U2028 \\ U2029 \\ U205F \\ U205F \\ U3000].
\\ S.Bo'sh joy bo'lmagan yagona belgini topishga imkon beradi. Kosmik belgisi ostida kosmos, jadvallar, sahifa tarjimasi, satr va boshqa globusik belgilar sifatida tushuniladi. Belgilar to'plamiga teng [^ \\ r \\ r \\ u1680e \\ u2002 \\ u2006 \\ u2008 \\ u2008 \\ u2008 \\ u2008 \\ u2008 \\ u2008 \\ u2008 \\ U2028 \\ U2029 \\ U205F \\ U205F \\ U3000].
[\\ b]Orqa vaqt belgisini topishga imkon beradi (maxsus belgi \\ b, u + 0008).
\0 0 (nol) belgisini topishga imkon beradi.
\\ N.Yangi satr belgisini topishga imkon beradi.
\\ F.Sahifani tarjima belgisini topishga imkon beradi.
\\ R.Avtoulovni qaytarish belgisini topishga imkon beradi.
\\ T.Gorizontal yorliqning ramzini topishga imkon beradi.
\\ V.Vertikal yorliqning ramzini topishga imkon beradi.
\\ W.Sizga bazaviy lotin alifbosining har qanday harf-raqamli ramzini, shu jumladan pastki chiziqni topishga imkon beradi. Belgilar to'plamiga teng.
\\ W.Bay lotin alifbosidan ramz bo'lmagan har qanday belgi topishga imkon beradi. Belgilar to'plamiga teng [^ a-za-z0-9_].
\\ Cx.Satrda boshqaruv belgisini topishga imkon beradi. Masalan, x dan z.-dan x harfi, masalan / \\ sm / ctrl-m ramzini bildiradi.
\\ Xhh.Oltin qiymatidan foydalangan holda belgi topishga imkon beradi (HH ikki raqamli o'n oltilik qiymat).
\\ uxhhUTF-16 Endoding yordamida (HHH - to'rt xonali o'nlik qiymat) yordamida belgi topishga imkon beradi.
\\ U (hhhh) yoki
\\ U (hhhh)
U + hhhh yoki u + hhhhh (o'n oltilik). Faqat u bayrog'i ko'rsatilganda.
\ Keyingi belgi o'zgacha ekanligini bildiradi va tom ma'noda talqin qilinmasligi kerak. Odatda maxsus talqin qilinadigan belgilar uchun keyingi belgi o'zgacha emasligini anglatadi va tom ma'noda talqin qilinishi kerak.

Cheklovlar

Miqdoriy vositasi

BelgiTavsif
n *Harakat belgisi nol yoki undan ortiq holatlar bo'lgan har qanday satrda sodir bo'ladi n..
n +..Mehmoning kamida bitta belgi mavjud bo'lgan har qanday satrda sodir bo'ladi n..
n?Har qanday satr oldingi elementi bilan amalga oshiriladi n. Nol yoki bir marta.
n (x)Belgilar ketma-ketligini o'z ichiga olgan har qanday qatorga mos keladi n. Ma'lum bir marta x.. X.
n (x,) x. Oldingi elementning chetida n.. X. Bir nechta ijobiy raqam bo'lishi kerak.
n (x, y)Hech bo'lmaganda bo'lgan har qanday qatorga mos keladi x.lekin bundan ko'p emas y. Oldingi elementning yozuvlari n.. X. va y. Ijobiy raqamlar sonida bo'lishi kerak.
n *?
N +?
N ??
n (x)?
n (x,)?
n (x, y)?
Harakat qiymati o'xshashligi sababli yuzaga keladi *, + +,? va (...) Qidiruv minimal taqqoslash. Odatiy "ochko'z" rejimi,? Qoniqiyning oxirida taqqoslashni takrorlash minimal vaqtni belgilashda "UNEON" rejimini belgilashga imkon beradi.
x (? \u003d y)Solishtirishga imkon beradi x.faqat uchun x. ergashmoq y..
x (?! Y)Solishtirishga imkon beradi x.faqat uchun x. buni qilma y..
x | y.Taqqoslash har qanday alternativalar bilan yuzaga keladi.

Guruhlash va orqaga burilishlar

BelgiTavsif
(x)Belgini topishga imkon beradi x. va taqqoslash natijasini eslang ("qiziqarli qavslar"). Taqqoslangan substratsiya natijasida hosil bo'lgan massivning elementlari, [n] yoki oldindan belgilangan regexp ob'ekti 1 dollargacha ..., $ 9.
(? X)Belgini topishga imkon beradi x.Ammo taqqoslashning natijasini yodlab olish uchun ("yo'qolmaydigan qavslar"). Yetkazib berilgan substratsiya natijasida hosil bo'lgan massivning elementlaridan kelib chiqishi mumkin ..., [n] yoki oldindan belgilangan regexp ob'ektining $ 1 ..., $ 9.
\\ N.N-O, qavslardagi qavslardagi qavslardagi qavslardagi qavslardagi qavslardagi harflardagi qarama-qarshi havolani muntazam ravishda (qavslar soni o'ngga yo'naltiriladi). n. Bir nechta ijobiy raqam bo'lishi kerak.

Doimiy ifodalar Ularni olib tashlash yoki almashtirish yoki almashtirish uchun matnlardagi so'zlar va iboralar uchun moslashuvchan qidirishga ruxsat bering.

Sintaksis:

// muntazam iborani yaratish uchun birinchi varianti \u003d yangi RejExp ( shablon,modasi); // Oddiy iborani yaratishning ikkinchi versiyasi variant-regexp \u003d / shablon/modasi;

shablon Qidirish uchun belgi shablonini o'rnatishga imkon beradi.

modasi Qidiruv xulq-atvorini sozlashga imkon bering:

  • i. - Harflar holatini ro'yxatdan o'tkazmasdan qidirish;
  • g. - global qidiruv (barcha tasodiflar faqat birinchi emas), balki hujjatda topiladi;
  • m. - Ko'p chiziqli qidiruv.

So'zlar va iboralar qidiring

Oddiy iboralardan eng oddiy foydalanish turli matnlarda so'zlar va iboralarni topishdir.

Keling, tahririyatni modifikatorlardan foydalangan holda ko'rsatamiz:

// oddiy ifoda RV1 RV1 \u003d / Rossiya /; // oddiy ifoda RV2 RV2 \u003d / Rossiya / g ni o'rnating; // oddiy ifoda RV3 RV3 \u003d / Rossiya / IG; // Jasoratli shrift taqsimlanadi, matnda tasodiflar RV1: Rossiya dunyodagi eng katta davlatdir. Rossiya 18 mamlakat bilan chegaradosh. Rossiya SSSR Davlat doimiydir. // Jasoratli shrift taqsimlanadi, matnda tasodiflar topiladi //-sessiyalar RV2: Rossiya dunyodagi eng katta davlatdir. Rossiya 18 mamlakat bilan chegaradosh. Rossiya SSSR Davlat doimiydir. "; / Domo shriftlari ajratilgan, bu dunyoning eng yirik holati. Rossiya 18 mamlakat bilan chegaradosh. Rossiya 18 mamlakat bilan chegaradosh. Rossiya 18 mamlakat bilan chegaradosh. Rossiya davlat - SSSR vorisi. ";

Maxsus belgilar

Oddiy ifoda shablonlaridagi an'anaviy belgilardan tashqari foydalanish mumkin maxsus belgilar (Metraces). Ta'riflangan maxsus belgilar quyidagi jadvalda keltirilgan:

Maxsus ramz Tavsif
. Satrning tugashi belgisi bundan mustasno, har qanday belgi bilan to'g'ri keladi.
\\ W. Har qanday alifbo tartibiga mos keladi.
\\ W. Alifbo ramzi bilan mos keladi.
\\ D. Raqamlar bo'lgan belgilar bilan mos keladi.
\\ D. Raqam bo'lmagan belgilar bilan mos keladi.
\\ S. Pichoq belgilariga to'g'ri keladi.
\\ S. Kosmik belgilarga to'g'ri kelmaydi.
\\ B. Xislar faqat so'zlarning chegarasida (boshida yoki oxirida) qidiriladi.
\\ B. Xayollarning so'zlari faqat so'z chegarasida emas.
\\ N. Qator tarjima belgisi bilan to'g'ri keladi.

/ * Iborasi REP1 ikkita o'zboshimchalik bilan boshlanadigan barcha so'zlarni topadi va "Vet" bilan tugaydi. Taklifning so'zlari kosmosga bo'linib ketganligi sababli, boshida va oxirida biz maxsus va oxirida biz Maxsus xususiyatlarga ega bo'lamiz) * / RR1 \u003d / S. \\ S / g; TXT \u003d "Salomning Atenant baxmaldeti"; Hujjatlar.write (TXT.Match (REG1)
"); / * Iborasi REP2 uchta ixtiyoriy harflar bilan boshlanadigan va" Vet "* / \\ s / gerb \\ s / g bilan tugaydigan barcha so'zlarni topadi (TXT.Match) "
"); Txt1 \u003d" o'yinchida "Oh baland hakam"; / * iborli Run3 "Var Run3 \u003d /" Var Run3 \u003d / "bilan tugaydigan barcha so'zlarni topadi ; Hujjat. Yo'nalish (TXT1.Match (REG3)
"); // ifoda REG4 raqamidagi barcha raqamlarni topadi. \u200b\u200bTXT2 \u003d" 5 yil davomida o'qish, 3 yil suzish, 9 yoshli suzish. "Hujjatlar.write (TXT2.Match) (Reg4) + "
");

Tez ko'rish

Kvadrat qavslardagi belgilar

Kvadrat qavs yordamida [Kayu] Siz ishlab chiqarishingiz kerak bo'lgan belgilar guruhini ko'rsatishingiz mumkin.

Kvadrat qavslardagi belgilar guruhining belgisi [^ qg] Bu aniqlanganlardan boshqa alfavitning barcha belgilarini qidirish kerakligini anglatadi.

Kvadrat qavslardagi belgilar orasidagi tirnoqlardan (-) [Aa] Siz ishlab chiqarishni xohlagan belgilar oralig'ini belgilashingiz mumkin.

Kvadrat qavslar yordamida siz raqamlarni qidirishingiz mumkin.

// muntazam ifodali reg1 reg1 \u003d / \\ sco [tdm] \\ s / g ni o'rnating; // matnli txt1 txt1 \u003d "mushuk tuppish kodi kom kommerant" ni o'rnating; // muntazam ifodali reg1 txt1 hujjati (TXT1.Match (REG1)-da muntazam ravishda ifodalash uchun mo'ljallangan.
"); Reg2 \u003d / \\ slo [^ tg] / g dot slot shpasi"; hujjat direktori (TXT2.Match (REG2) + "
"); Reg3 \u003d // g;" 5 yillik o'qish, 3 yil suzish, 9 yoshli otish "; hujjat. Hujjat direktori (REG3.Match);

Tez ko'rish

Miqdoriy vositasi

Miqdoriy vositasi - Ushbu dizayn avvalgisidan oldin yoki belgilar guruhi tasodifan uchrashishi kerak bo'lgan belgilarni belgilashga imkon beradi.

Sintaksis:

// Oldingi belgi X-vaqt bilan uchrashishi kerak (x) // Oldindan belgilangan belgi x dan bir muncha vaqtgacha uchrashishi kerak (x, y) // Oldingi ramz kamida x marta uchrashishi kerak (x,) // avvalgi ramz 0 yoki undan ko'p marta bo'lishi kerakligini bildiradi * // oldingi ramz 1 yoki undan ko'p marta uchrashishi kerakligini bildiradi + // oldingi ramz 0 yoki 1 marta paydo bo'lishi kerakligini bildiradi ?


// muntazam ifodani o'rnating RV1 RV1 \u003d / C Co. (5) Wat / G // muntazam ifodani tanlang RV2 RV3 \u003d / CO. + / G munduzi RV4 RV4 \u003d / KO ni o'rnating RV5 RV5 \u003d // Doimiy ifoda RV1-dagi RV1-dan foydalangan holda tasodifni ko'rsatadi: Kushka mushuk Kookka mushuk murabbiyi Kooooooooooooooooooooooooooooooooooooooooooooooooko'rgazma RV2: Cash Cat Mushuklaridan foydalanishda matnda topiladi koo-Cooo CoooOOKHOP Coooooooookh Cooooooohoxha // qalin shrift RV3-dan foydalanish //-ni ishlatishda tasodiflar topilishi ko'rsatilganligini ko'rsatadi / Kushka cat Koushka Couchop CoooOOKHOKO Kooooooooooooooooxka // LOD FONT RV4-ni ishlatish //-soshop coooooo Cooooo Cooooo Coooooo Cooooooo Cooooo Cooooooxoo CoooooOox Kooooooxka // Sold Short matnda: cash Cat Cat Kookkaooooooooooooo

Eslatma: Agar siz biron bir maxsus belgini ishlatmoqchi bo'lsangiz (masalan. * + + + + Yoki () odatiy ravishda uning oldiga qo'yishingiz kerak.

Dumaloq qavslardan foydalanish

Oddiy ifoda shablonining bir qismini qavslarga kiritish orqali siz shablonning ushbu qismida topilgan tasodifni eslab qolish uchun ifodani ko'rsatasiz. Saqlangan tasodifdan keyinchalik kodingizda foydalanish mumkin.

Masalan, muntazam ifoda / (Dmitriy) \\ Svasiev "Dmitriy Vasilyev" liniyasini topadi va "Dmitriy" substratsiyasini eslaydi.

Quyidagi misolda biz matnda so'z tartibini o'zgartirish uchun almashtirish () usulidan foydalanamiz. Saqlangan tasodifga murojaat qilish uchun biz $ 1 va $ 2 dan foydalanamiz.

Var regexp \u003d / (dmitriy) (Vasilyev) /; Var matn \u003d "Dmitriy Vasilyev"; var NewText \u003d matn.Replace (RegExp, $ 2 $ 1); Hujjatlar.write (NewText);

Tez ko'rish

Sumaloq qavslashmalar chorak belgilarni guruhi sifatida guruhlash uchun ishlatilishi mumkin.

Muammolarga duch kelgan ba'zi odamlar: "Oh va men muntazam iboralardan foydalanaman." Endi ularning ikkita muammosi bor.
Jeymi Runovskiy

Yuan-MA dedi: "O'rmonning tuzilishiga daraxt kesish uchun juda ko'p kuch talab etiladi. Muammoning qulashi uchun juda ko'p kod talab qilinadi.
Yuan-ma ustasi, "Dasturlash kitobi"

Dasturlash vositalari va texnikasi tartibsiz va tartibsiz ravishda tarqatiladi. Ba'zan ular chiroyli va aqlli emas, balki o'z dalada juda yaxshi ishlaydiganlar - masalan, agar ular boshqa muvaffaqiyatli texnologiyaga qo'shilsa.

Ushbu bobda biz ushbu vositani muhokama qilamiz - muntazam ifodalar. Bu shablonlarni simli ma'lumotlarga ta'riflash usuli. Ular JavaScript va boshqa tillarda va vositalarida kiritilgan kichik bir tilni yaratadilar.

Doimiy muntazamlik juda g'alati va juda foydali. Ularning sintaksisi sirli va JavaScript-dagi dastur interfeysi bema'nilikdir. Ammo bu tadqiqot va saralash uchun kuchli vositadir. Ular bilan tushunib, siz yanada samarali dasturchiga aylanasiz.

Oddiy iborani yarating

Muntazam ravishda ob'ekt turi. U RegExp konstruktorini chaqirish yoki stroklar bilan o'ralgan naqshni yozish orqali yaratilishi mumkin.

Var re1 \u003d yangi RejExp ("ABC"); Var re2 \u003d / abc /;

Ushbu ikkala muntazam iboralarning ikkalasi bitta andozani anglatadi: "A" belgisi, undan keyin "b" belgisi "c" belgisi.

Agar siz RegExp konstruktoridan foydalansangiz, shundan so'ng shablon oddiy satr sifatida yozilgan, shuning uchun barcha qoidalar teskari qatlamlarga nisbatan.

Ikkinchi yozuv, shablon sinish orasidagi, teskari teskari jarayoni boshqacha harakat qiladi. Birinchidan, naqsh to'g'ri yo'l bilan tugaydi, shunda siz bizning shablonimizga kiritishni istagan to'g'ridan-to'g'ri plita oldida versiya qo'yishingiz kerak. Bundan tashqari, tipdagi maxsus belgilarning bir qismi bo'lmagan teskari chiziqlar saqlanadi (va chiziqlardagi kabi, chiziqlardagi kabi) va shablonning ma'nosini o'zgartiradi. Savol belgisi yoki plyus kabi ba'zi belgilar muntazam ravishda muntazam ravishda ahamiyatga ega va agar siz bunday belgini topsangiz, u teskari yo'lni tayyorlash kerak.

Var SoldenPlus \u003d / o'n sakkiz \\ +;

Qaysi belgilar sizni tikishining oldini olish uchun kerakligini bilish uchun siz muntazam ravishda barcha maxsus belgilar ro'yxatini o'rganishingiz kerak. Bu haqiqat bo'lmaganda, agar shubha bo'lsa, uni harf, raqam yoki bo'shliq bo'lmagan har qanday belgi oldida ushlab turing.

Tasodifni tekshiring

Regutyorlar bir nechta usullarga ega. Eng oddiy - sinov. Agar siz uni satr bersangiz, u Boolean qiymatini qaytaradi, chunki chiziqda belgilangan shablonning yozuvi mavjudmi yoki yo'qmi, xabar beradi.

Konsol.log (/bc// ustasi ("ABCDE")); /// → haqiqiy konsol.log (/bc// ustasi ("ABXDE")); /// → FALSE.

Doimiy ravishda, faqat maxsus bo'lmagan belgilardan iborat, shunchaki ushbu belgilarning ketma-ketligini anglatadi. Agar ABC biz tekshiradigan chiziqda bo'lsa (nafaqat boshida emas), sinov haqiqatni qaytaradi.

Biz belgilarni qidirmoqdamiz

ABC satrida ABC qatorini o'z ichiga olganligini aniqlash uchun u indeksof bilan bo'lishi mumkin. Doimiy ravishda sizga yanada murakkab naqshlarni berishga imkon beradi.

Aytaylik, biz har qanday raqamni topishimiz kerak. Belgilangan belgilar to'plamini muntazam qavslarda o'rnatganimizda, bu ifodaning har qanday belgilaridagi har qanday belgilarga to'g'ri keladi.

Ikkala ibora ham raqamni o'z ichiga olgan chiziqlarda.

Konsol.log (//. Test ("1992 yilda"))); /// → Haqiqiy konsol.Log (//. Test ("1992 yilda")))); /// → haqiqat.

Kvadrat qavs ichida, ikki belgidan iborat bo'lishi, ucdikod kodlashiga ketma-ketlik belgilanadigan belgilar oralig'ini belgilash uchun ishlatiladi. 0 dan 9 gacha bo'lgan belgilar shunchaki ketma-ket (48 dan 57 gacha kodlar) mavjud, shuning uchun u barchasini qamrab oladi va har qanday raqam bilan to'g'ri keladi.

Bir nechta belgilar guruhlari o'zlarining o'rnatilgan pasayishlariga ega.

\\ D har qanday raqamli
\\ w harf-raqam belgisi
adyol ramzi (bo'sh joy, yorliq, satr tarjimasi va boshqalar)
\\ D raqam emas
\\ W harf-raqam belgisi emas
\\ S bo'sh belgi emas
. Tarjima chizig'idan tashqari har qanday belgi

Shu tarzda, siz 30-01-2003 15:20 gacha bo'lgan sana va vaqt formatini quyidagi ifoda bilan so'rashingiz mumkin:

Var DateTime \u003d / \\ d \\ d \\ d \\ d \\ d \\ d \\ d / d \\ d \\ d / d \\ d \\ d / d: Konsol.log (DateTime.Test ("30-01-2003 15:20")); /// → Haqiqiy konsol.Log (DateTime.Test ("30 yanvar-2003 15:20"))); /// → FALSE.

Dahshatli ko'rinadi, to'g'ri? Shablonni tushunishni qiyinlashtiradigan juda ko'p teskari qatlamlar. Keyinchalik biz uni biroz yaxshilaymiz.

Teskari zarbalar ham kvadrat qavslarda ham ishlatilishi mumkin. Masalan, [\\ d] har qanday raqam yoki nuqta degan ma'noni anglatadi. E'tibor bering, kvadrat qavs ichidagi nuqta o'zgacha qiymatini yo'qotadi va shunchaki nuqtaga aylanadi. Xuddi shu narsa boshqa maxsus belgilar, turiga tegishli.

Belgilangan belgilar to'plamini - ya'ni biron bir belgini topishingiz kerak, ular to'plamdagilar bundan mustasno - siz ochilgan kvadrat qavsidan so'ng darhol belgi qo'yishingiz mumkin.

Var Notbahary \u003d / [^ 01] /; Konsol.log (noxbinare.test ("11001000100100110"); /// → Soxta konsol.log (noxbinare.test ("110010001000110"); /// → haqiqat.

Biz shablonning qismlarini takrorlaymiz

Biz bitta raqamni qanday topishni bilamiz. Va agar biz butunlay sonini - bir yoki bir nechta raqamning ketma-ketligi kerakmi?

Agar siz muntazam belgisidan keyin qo'ysangiz, bu element bir necha marta takrorlanishi mumkinligini anglatadi. / \\ d + / bir nechta raqamni anglatadi.

Konsol.log (/ "\\ D +" /. Sinov ("123" ")); /// → haqiqiy konsol.log (/ "\\ D +" /. Sinov ("" "")); /// → Soxta konsol.Log (/ "\\ d *" /. Sinov ("123" "))); /// → haqiqiy konsol.log (/ "\\ d *" /. Sinov ("" "")); /// → haqiqat.

Yulduzlardagi * qiymati deyarli bir xil, ammo u shablonga nol vaqt o'tkazishga imkon beradi. Agar biror narsa yulduzlarga rioya qilsa, u shablonni satrda topishiga to'sqinlik qilmaydi - bu shunchaki nol vaqt bor.

Savol belgisi shablon ixtiyoriy qismini, ya'ni u nol yoki bir marta uchrashishi mumkin. Keyingi misolda, u belgi bo'lishi mumkin, ammo shablon bo'lmasa, mos keladi.

Var qo'shn \u003d / qo'shingiz? R /; Konsol.log (qo'shnichilik ("qo'shni"))); /// → haqiqiy konsol.log (qo'shnichilik ("qo'shnichilik"))); /// → haqiqat.

Andoza bilan uchrashishi kerak bo'lgan aniq sonni belgilash uchun jingalak qavslar ishlatiladi. (4) Elementdan keyin 4 marta qatori bilan uchrashish kerakligini anglatadi. Siz ham bo'shliqni o'rnatishingiz mumkin: (2.4) Element kamida 2 va undan ko'p bo'lmaganligini anglatadi.

Sana va vaqt formatining yana bir versiyasi, ularda bir yoki bir yoki bir nechta raqamdan bir yoki ikki raqamdan ruxsat berilgan. Va u shunchaki o'qiydi.

Var DateTime \u003d / \\ d (1,2) - \\ D (1) \\ d (1,2): \\ d (2) /; Konsol.log (DateTime.Test ("30-1-2003 8:45"); /// → haqiqat.

Siz bir necha sonni pasaytirib, vaqt oralig'ida foydalanishingiz mumkin. (, 5) shablon noldan besh martagacha uchrashishi va (5,) - besh yoki undan ortiq.

Obunani guruhlash

To'xtatib-yoki + bir nechta elementlarda * yoki operatorlardan foydalanish uchun siz qavslardan foydalanishingiz mumkin. Qavs ichiga o'ralgan muntazam qismning bir qismi operatorlar nuqtai nazaridan bitta element hisoblanadi.

Var CraftCritring \u003d / boo + (Hoo +) + / i; Konsol.log (kartorumdan tashqari.test ("bobooohoooo"); /// → haqiqat.

Birinchi va ikkinchi afzalliklarga Boo va Hoo so'zlarida faqat ikkinchi harflar kiradi. Uchinchisi, bir yoki bir nechta bunday ketma-ketlikni topib, butun guruh (Hoo +) ni anglatadi.

Iqoning oxirida i harfi muntazam beparvolikni ramz reestriga beixtiyor qiladi - b ga to'g'ri keladi.

Tasodiflar va guruhlar

Sinov usuli - bu tartibga soluvchilarni tekshirishning eng oson usuli. U faqat tasodif topilgan yoki yo'qligini aytadi. Regutyorlar boshqa IJning boshqa usulida, agar hech narsa topilmasa, nullni qaytaradi va aks holda ob'ekt tasodif haqida ma'lumot bilan qaytadi.

Var match \u003d /\\d+/Exec ("bir ikki 100); Konsol.log (match); /// → ["100"] konsol.log (match.index); /// → 8.

Qaytarilgan ITning ob'ekti indeks mulkiga ega, ularda tasodif bo'lgan belgilar raqami mavjud. Umuman olganda, ob'ekt qatorlar qatoriga o'xshaydi, bu erda birinchi element tasodifga aylangan satr. Bizning misolda biz qidirayotgan raqamlar ketma-ketligi bo'ladi.

Stringlar bir xil ishlayotgan o'yin usuliga ega.

Konsol.log ("bitta ikki 100" .Match (/ \\ d + /)); /// → ["100"]

Doimiy ravishda qo'shma qavslar bilan guruhlanganda, ushbu guruhlarga to'g'ri keladigan matnda qatorda ham qatorda mavjud bo'ladi. Birinchi element har doim butun tasodifdir. Ikkinchisi, birinchi guruhga to'g'ri keldi (barchasidan oldinroq asta-sekin ko'targan), keyin ikkinchi guruh va boshqalar bilan.

Var tirnoq \u003d / "([^"] *) "/; ConteTeText.Exec (" Salomat.Exec ("Salomat.Exec (" Salomatlik "))" "Salom" "))" "Salom", "Salom"]

Guruh umuman topilmaganda (masalan, agar bu savol ortida bo'lgan savolning orqasida bo'lsa), uning pozitsiyasi aniqlanmagan. Agar guruh bir necha bor bir necha bor bir necha bor mos kelsa, u erda faqat so'nggi tasodif bo'ladi.

Konsol.log (/ yomon (/ yomon)? ("Yomon"))); /// → ["yomon", aniqlanmagan] konsol (/ (/ d) + /.) ("123")); /// → ["123", "3"]

Guruhlar qismni qazib olish uchun foydalidir. Agar biz shunchaki sana chizig'i chiziqda ekanligini tekshirib, uni olib tashlash va sana ko'rsatilgan ob'ektni yaratish kerak bo'lsa, biz bir qator raqamlarga qavslar ichiga kiritishimiz va sanadan so'ng sana tanlashimiz mumkin.

Ammo JavaScript-dagi sana va vaqtni saqlashning afzal ko'rgan usulini o'rganadigan ozgina degensiyadan boshlanadi.

Sana turi

JavaScript standart yoki aksincha, vaqt o'tishi bilan odatdagi ob'ektga ega. U sana deb ataladi. Agar siz yangi kunlik ob'ektni yangilagan bo'lsangiz, joriy sana va dasturni olasiz.

Konsol.log (yangi sana ()); /// → Sun Nov 09 2014 00:07:57 GMT + 0300 (Cet)

Siz shuningdek belgilangan vaqtni o'z ichiga olgan ob'ektni yaratishingiz mumkin.

Konsol.log (Yangi sana (2015, 9, 21)); /// → Wed oktyabr 21 2015 00:00:00 GMT + 0300 (Cet) konsol (Yangi sana (Yangi sana (Yangi sana (yangi sana) (yangi sana (2009, 59, 999, 59, 999, 999, 999, 999, 59, 999, 59, 999)); /// → wed sek 09 2009 12:59 GMT + 0300 (Cet)

JavaScript Unda raqamlar noldan boshlanadi, va birlikdan bir necha kunlar sonidan foydalaniladi. Bu ahmoq va kulgili. Ko'taring.

So'nggi to'rtta dalil (soat, daqiqalar, soniya va millisekundlar) majburiy emas va nolga teng bo'lmagan.

Vaqt yorliqlari 1970 yillarning boshlaridan beri o'tgan millisecondlar soni sifatida saqlanadi. Vaqt o'tishi bilan 1970 yilgacha salbiy raqamlardan foydalaniladi (bu vaqtning o'zida yaratilgan UNIX vaqt bitimi bilan bog'liq). Sana ob'ektining xarid qilish usuli bu raqamni qaytaradi. Bu tabiiy ravishda katta.
Konsol.log (Yangi sana (2013, 11, 19) .Gime ()); ///// → 1387407600000 Console.log (Yangi sana (1387407600000); ///////0 2013 yil 19:00:00 GMT + 0100 (Cet)

Agar siz bir dalilni belgilasangiz, u bir qator millisekundlar sifatida qabul qilinadi. Siz sana ob'ektini yaratish va sana bilan chaqirish orqali siz joriy millisecond qiymatini olishingiz yoki olish usulini yoki sanaga qo'ng'iroq qilish orqali siz joriy millisecond qiymatini olishingiz mumkin.

Tarkibi tarkibiy qismlarini qazib olish uchun sana, getmont, getdatit, getMins, Getminutlar va getekundlar mavjud. Shuningdek, 93 yoki 14-to-ni, 93 yoki 14-turni qaytaradigan getyear usul mavjud.

Shablonning zarur qismlarini qavslarga tuzish orqali biz sanadagi sana ob'ektini to'g'ridan-to'g'ri satrdan yaratamiz.

Funktsiya FindDate (String) (\\ d (1,2)) - (\\ d (1,2)) - (\\ d (1)) / (\\ d (1)) / DatePime.Exec (satr); qaytish Yangi sana (raqam (match), raqam (match) - 1, raqam (match));) konsol.log ("30-1-2003")); /// → thu 30 2003 00:00:00 GMT + 0100 (Cet)

So'z va satr chegaralari

Afsuski, FindDate ham quvonch bilan "100-130000" qatoridan ma'nosiz sana evazini olib tashlaydi. Taspoflar chiziqning istalgan joyida sodir bo'lishi mumkin, shuning uchun bu holda u ikkinchi ramzdan boshlanadi va penultimetrni tugatadi.

Agar biz tasodifni butunlay olishni majburlashimiz kerak bo'lsa, biz teglar ^ va $ ni ishlatamiz. ^ chiziqning boshlanishiga to'g'ri keladi va tugaydi. Shuning uchun / ^ \\ d + $ / faqat bitta yoki bir nechta raqamdan iborat satr bilan to'g'ri keladi, / ^ / Form belgisi bilan bir-biriga to'g'ri keladi, / X ^ / har qanday chiziqqa mos kelmaydi (ishga tushirishdan oldin) u x ga teng emas).

Agar boshqa tomondan, biz shunchaki Kalomning chetida boshlanadi va tugashi kerakligiga ishonch hosil qilishimiz kerak, biz yorliqdan foydalanamiz. Chegara chegarasi satrning boshlanishi yoki tugashi bo'lishi mumkin, bu erda bir qo'lda harf-raqamli belgi \\ w raqamli belgi \\ w-raqamli va boshqa tomondan - harf-raqam.

Konsol.log (/cat/.Test ("Konvertatsiya"))); /// → Haqiqiy konsol.Log (/ \\ bcat \\ b / .Test ("Konvertatsiya"))); /// → FALSE.

E'tibor bering, chegara yorlig'i ramz emas. Ehtimol, tasodifning ma'lum bir shart bajarilsa, bu shunchaki cheklovni anglatadi.

Tanlovlar bilan shablonlar

Matn raqami emasligini aniqlash kerak deb taxmin qilish kerakmi yoki bitta yoki bir nechta raqamda cho'chqa, sigir yoki tovuqni o'z ichiga olganligini aniqlash kerak.

Uchta yozish va ularni o'z navbatida tekshirish mumkin, ammo yaxshiroq yo'l bor. Belgisi | Chapdagi va uning o'ng tomonidagi andozalar orasidagi tanlovni bildiradi. Va biz quyidagilarni aytishimiz mumkin:

Var Anicte \u003d / \\ b \\ D + (cho'chqa | sigir | tovuq) s? \\ B /; Konsol.log (EASKSCOLLEST.TEST ("15 ta cho'chqalar"); /// → Haqiqiy konsol.Log (TVMSCOLLEST.Test (15 ta pigchiks)); /// → FALSE.

Qavslar shablonning qismini cheklaydilar va siz ikkita variantni tanlash uchun bir-biringiz bilan ko'p operatorlarni bir-biri bilan qo'yishingiz mumkin.

Qidiruv mexanizmi

Oddiy iboralar fazilatlar sifatida ko'rib chiqilishi mumkin. Quyidagi diagrammada oxirgi hayvonlar kodi tasvirlangan.

Agar siz jadvalning chap tomonidagi yo'lni o'ng tomonda topsangiz satrga to'g'ri keladi. Biz ketma-ket hozirgi holatni eslaymiz va har safar to'rtburchakni olib, chiziqning orqasida pozitsiyaning orqasida joylashgan qismini tekshirib ko'ring.

Shunday qilib, blok diagrammada o'tayotganda "3 cho'chqalar" qatorida muntazam ravishda muntazam ravishda muntazamlik bilan tekshirish quyidagicha ko'rinadi:

4-bandda so'zning chegarasi bor va biz birinchi to'rtburchakni o'tkazamiz
- 4 pozitsiyadan boshlanamiz, biz raqamni topamiz va biz ikkinchi to'rtburchakdan o'tamiz
- 5-o'rinda ikkinchi yo'lning bir usuli yopiladi, ikkinchisi kosmos bilan to'rtburchaklarga qaytadi. Bizda joy emas, balki bo'sh joy bor va biz ikkinchi yo'lni tanlaymiz.
- Endi biz 6 pog'onani, "cho'chqalar" va yo'llarning uchburchagi holatidamiz. "Sigir" yoki "tovuq" liniyasi yo'q, ammo "cho'chqa" bor, shuning uchun biz bu yo'lni tanlaymiz.
- Uch kunlik pog'onadan keyin 9 pozitsiyasida, "S" ni bir-biriga aylantirgan va so'z chegarasi bilan oxirgi to'rtburchakka olib boradi va ikkinchi o'rinni "s" orqali o'tadi. Bizda "s" bor, shuning uchun biz u erga boramiz.
- 10 holatida biz chiziq oxirida, va tasodif faqat so'zning chegarasi bo'lishi mumkin. Chiziqning oxiri chegara hisoblanadi va biz oxirgi to'rtburchakdan o'tamiz. Shunday qilib, biz shablonimizni muvaffaqiyatli topdik.

Aslida, muntazam ifodalar quyidagicha ishlaydi: algoritm chiziqning boshida boshlanadi va u erda tasodif topishga harakat qiladi. Bizning holatda, so'zning chegarasi bor, shuning uchun u birinchi to'rtburchakni olib ketadi - lekin raqamlar yo'q, shuning uchun ikkinchi to'rtburchakda qoqilib ketdi. Keyin u chiziqdagi ikkinchi ramzga harakat qiladi va u erda tasodif topishga harakat qilmoqda ... va u tasodifni topgunga qadar yoki chiziqning oxirigacha hech qanday mos kelmaydi.

Bosh

Muntazam / \\ b (+ B | \\ D + H) \\ b / to'g'ri raqamli raqamlar bilan (0 dan 9 gacha yoki belgilarsiz raqamli raqam). A dan h), keyin H. Tegishli diagramma:

Tasodimni qidirishda, algoritm, hatto chiziqda bunday raqam bo'lmasa ham, eng yuqori yo'l bo'ylab (ikkilik raqami) borishi mumkinligi bo'lishi mumkin. Masalan, "103" qatorida bo'lsa, masalan, faqat 3 algoritm, u noto'g'ri yo'lda ekanligini anglab etishlari aniq. Umuman olganda, chiziq oddiy, shunchaki ushbu sohada emas.

Keyin algoritm orqaga qaytariladi. Vilkalar, u hozirgi holatni eslaydi (bizning holatda, bu chiziqning boshlanishi, agar tanlangan bo'lsa, boshqa yo'lni sinab ko'rishingiz uchun, boshqa yo'lni sinab ko'rishingiz uchun. "103" satrida kuchli uchlik bilan uchrashuvdan so'ng, u qaytib keladi va o'nlik raqamlar uchun yo'ldan o'tishga harakat qiladi. Bu ishlaydi, shuning uchun tasodif topiladi.

Algoritm to'liq tasodif topishi bilanoq to'xtaydi. Bu shuni anglatadiki, hatto bir nechta variantlar yondashishi mumkin bo'lsa ham, ulardan bittasi ishlatiladi (ular doimiy ravishda paydo bo'lgan tartibda).

AS + va * takrorlash operatorlaridan foydalanganda rulonlar ro'y beradi. Agar siz qidirayotgan bo'lsangiz / ^ *. * / Abcxe satrida muntazamning bir qismi. * Butun chiziqni o'zlashtirishga harakat qiladi. Keyin algoritm, shuningdek, u shuningdek "x" kerakligini aniqlaydi. Chiziq tugaganidan keyin "X" yo'q emas, algoritm bitta belgiga o'tish, tasodif izlashga harakat qiladi. ABCX-dan keyin x yo'q bo'lsa, u yana orqaga qaytadi, u yana ABC Sustringga aylandi. Va chiziqdan keyin u X va muvaffaqiyatli tasodif haqida hisobot beradi, 0 dan 4 gacha

Siz muntazam ravishda yozishingiz mumkin, bu bir nechta qaytarishlarga olib keladi. Bunday muammo shablon turli xil usullar to'plamiga mos kelganda yuzaga keladi. Masalan, ikkilik raqamlar uchun muntazam ravishda yozishda xatolik qilsak, biz tasodifan yoki (+) + b / b.

Agar algoritm bunday shablonni "b" oxirida bo'lmagan holda qidirayotgan bo'lsa, u birinchi bo'lib raqamlarni tugamaguncha ichki pastadirdan o'tadi. Shunda u oxirida "B" yo'qligini sezadi, bu bitta pozitsiyani qaytaradi, u tashqi dengizda bo'lib o'tadi, u yana tashqariga chiqadi, ichki pastadirda yana bir pozitsiyaga qaytarishga harakat qiladi. . Va u ikkala shnani ham velosiped yo'lini qidirish uchun yanada ko'proq bo'ladi. Ya'ni, har bir satringizdagi ish miqdori ikki baravar ko'payadi. Bir necha o'nlab belgilar uchun ham tasodifni qidirish juda uzoq vaqt talab etadi.

Usul almashtirish

Stringlar boshqa satr qatorining bir qismini almashtirishi mumkin bo'lgan almashtiriladi.

Konsol.log ("DAD" .Raclace ("P", "M"); /// → Mapa

Birinchisi muntazam bo'lishi mumkin, bu holda satrda doimiy muntazamlikning birinchi yozuvi bilan almashtiriladi. "G" optsiyasi (global, universal) muntazam ravishda qo'shilganda, barcha yozuvlar faqat birinchi emas

Konsol.log ("Borobudur" .Replace (//, "a")); /// → Barobudur konsol.log ("Borobudur" .Replace (// g, "a")); // → Barabadatar

Bu "Barchasini almashtirish" variantini alohida tortishuv orqali yoki alohida almashtirish usuli orqali uzatish mantiqiy bo'ladi. Ammo, afsuski, tanlov muntazam ravishda o'z-o'zidan uzatiladi.

Guruh satrida topilganlarga tegishli ma'lumotlardan foydalanayotganda barcha quvvat regimatsiyalari muntazam ravishda ko'rsatilgan. Masalan, bizda "Familiya, ism" formatida odamlar ismlarini, bitta ismini o'z ichiga olgan satrimiz bor. Agar biz ularni joylarda o'zgartirishimiz va vergulni olib tashlashimiz kerak bo'lsa, unda biz "nom", biz quyidagilarni yozamiz:

Konsol.log ("Xitper, Greys \\ nmckarti, Jon \\ nmekchie, Dennis", ([\\ w] / g, "$ 2 $ 1"); /// → Greyce Hopper // Jon Makkarti // Dennis Ritchi

O'zgartirish liniyasida $ 1 va $ 2 qavs ichiga qo'yilgan belgilar guruhlariga qarang. 1 AQSh dollari, birinchi guruhga, ikkinchi guruh bilan, ikkinchi guruhga, va boshqalar bilan almashtiriladi. Butun tasodif - &.

Ikkita dalilni ikkinchi dalil sifatida ham o'tkazishingiz mumkin. Har bir almashtirish uchun funktsiya topilmasin, ularning dalillari keltirilgan (va butun liniyaning butun chiziqning tasodifi) va uning natijalari yangi satrga kiritiladi.

Oddiy misol:

Var s \u003d "CIA va FBR"; Konsol.log (/ \\ b (FBI | CAA) \\ b / g, funktsiyasi (qaytish str.tupperperfper (););); /// → CIA va FBR

Ammo yanada qiziqarli:

Var aktsiyadir \u003d "1 limon, 2 kabaxta va 101 tuxum"; Funktsiya Minusone (O'RNATISH, MARKI, BIRLASH) (summa) - 1; Agar faqat bittasi bo'lsa, birlik oxiridagi "s" ni o'chiring \u003d BIRINChI BIRLASHMASI (0, birlik) . 1); agar (miqdor) miqdor \u003d "yo'q"; "yo'q"; qaytarish miqdori + "+ blok; (\\ W +) / g , minusone)); /// → limon, 1 karam va 100 ta tuxum

Kodekni satrni oladi, raqamlarning barcha yozuvlarini topadi, keyin so'z bilan kiradi va har bir raqam bitta tomonidan qisqartiriladi.

Guruh (\\ d +) birlikda (\\ w +) miqdordagi argumentga tushadi. Funktsiya miqdorini o'zgartiradi - va u har doim ishlaydi, chunki bizning shablonimiz adolatli \\ d +. Va keyin so'zga o'zgartirish kiritadi, agar faqat 1 ta mahsulot qolsa.

Ochko'z

JavaScript kodeksidagi barcha sharhlarni olib tashlaydigan funktsiyani yozish uchun almashtirish juda oson. Bu birinchi urinish:

Funktsiya fastguzilmlari (kod kodi) (/ \\ / \\ //\\ * \\ * \\ // g, ');) konsol (chiziqlar) ("1 + / * 2 * / 3 "))); /// → 1 + 3 konsol.log ("x \u003d 10; // o'n!")); /// → x \u003d 10; Konsol.log ("1 / * A * / / * B * / 1"))); /// → 1 1

Operator oldida bir qism "yoki" ikkita silkitka, so'ngra har qanday belgilar bilan bir qator belgilar bilan to'g'ri keladi, ular qator tarjima belgisi bundan mustasno. Ko'p chiziqli sharhlarni olib tashlaydigan parcha yanada murakkabroq. Biz [^], i.e. dan foydalanamiz Har qanday xarakterni topish uchun yo'l sifatida bo'sh bo'lmagan har qanday belgi. Biz nuqtadan foydalana olmaymiz, chunki blokarjlar yangi qatorda davom etmoqda va "Tarjima" belgisi nuqtaga mos kelmaydi.

Ammo avvalgi misolning chiqish noto'g'ri. Nima uchun?

Qism [^] * Iloji boricha ko'p belgilarni qo'lga kiritishga harakat qiling. Agar shuni tufayli, muntazam ravishda tasodiflar topilmasa, u bitta belgiga qaytariladi va yana urinib ko'ring. Masalan, algoritm butun ipni ushlashga harakat qiladi va keyin orqaga qaytadi. 4 tagacha tushib qolish, u chiziqda topadi * / - Bu biz erishgan narsa emas. Biz faqat bitta sharhni bajarishni va chiziqdan o'tmasdan va yakuniy sharhni topmaslikni xohladik.

Shu sababli, biz takrorlovchi operatorlar (+, *, *, ()) ochko'zlik, ya'ni ular qanchalik iloji borligini va keyin qaytib ketishlarini aytamiz. Agar siz bunday operatordan keyin savol bergan bo'lsangiz (+? +?) (+?), ()?), Ular buzilmaydi va mumkin bo'lgan yozuvlarni engil topa boshlaydilar.

Va bu bizga kerak bo'lgan narsa. Yulduzlarni tasodiflarni topishga majburlash, biz eng past darajadagi tikuv belgilarida, biz faqat bitta sharhlarni o'zlashtiramiz va boshqa hech narsa yo'q.

Funktsiya Chricckments (ENDROC kod) (/ \\ //.** | *? \\ * \\ // g, ");) konsol.log (" 1 / * A * / + / * B * / 1 ")); /// → 1 + 1

Ko'pgina xatolar nomaqbul operatorlardan foydalanganda yuz beradi. Takroriy operatordan foydalanganda, avval siz uni har doim ujuden operatorining variantini ko'rib chiqasiz.

Dinamik Dinamik RegExp ob'ektlari

Ba'zi hollarda, kodni yozayotganda aniq shablon noma'lum. Masalan, siz matnda foydalanuvchi nomini qidirishingiz kerak va uni urg'uga kiriting. Siz dasturni ishga tushirgandan keyingina o'rganasiz, siz yozuvni to'plangan holda ishlatmaysiz.

Ammo siz satrni qurishingiz va RegExp konstruktoridan foydalanishingiz mumkin. Mana bir misol:

Var ism \u003d "Garri"; Var matn \u003d "va Garrining peshonasida chandiqqa." var regexp \u003d yangi RejExp ("\\\\ b (" + Ism + ") \\\\ B", "GI"); konsol.log (matn.Replace (RejExp, $ 1_ »))); /// → va peshonadagi chandiqda.

Belgilarni yaratishda so'z ikki qatlamlardan foydalanishga to'g'ri keladi, chunki biz ularni oddiy chiziqda yozamiz va to'g'ri zinapoyalarda emas. RegExp uchun ikkinchi dalil tarkibida "Gi", I.E., I.E. Global va ro'yxatdan o'tgan.

Ammo ism "DEA + Hlrd" bo'lsa-da, u (agar bizning foydalanuvchiimiz Kulxanker bo'lsa)? Natijada, biz tasodiflar qatorida topilmaydigan doimiy muntazam ravishda muntazam ravishda muntazam ravishda muntazam ravishda olamiz.

Biz yoqtirmaydigan har qanday belgigacha biz orqaga burilishimiz mumkin. Biz harflar oldidagi teskari zarbalarni qo'sha olmaymiz, chunki \\ b yoki \\ n maxsus aralashma. Ammo siz har qanday alifbo tartibidagi raqamli belgilar oldida osongina qo'shishingiz mumkin.

Var ism \u003d "DEA + Hlrd"; Var matn \u003d "Bu DEA + Hlrd barchani oldi."; "Var Estraced \u003d Ism.Replace (/ [^ \\ w \\ s] / g," \\\\ $ & "); var regexp \u003d yangi regexp ("\\\\ b (" +dan qochib + ")," GI "); konsol.log (matn.Replace (RejExp, $ 1_ »))); /// → Bu _dea + Hlrd_ barchani oldi.

Qidiruv usuli

Indeksni muntazam ravishda ishlatib bo'lmaydi. Ammo muntazam kutayotgan qidiruv usuli mavjud. Indeksof kabi, agar u birinchi kirish indeksini qaytaradi yoki agar bo'lmasa, u.

Konsol.log ("so'z" .Sarch (/ S /)); /// → 2 konsol.log (".Search (/ S /)); ///1.

Afsuski, ma'lum bir ofatdan boshlab tasodifni qidirish usulini belgilash mumkin emas (indeksof bilan bajarilishi mumkin). Bu foydali bo'lar edi.

Mulk Finindex

ITT usuli Yoki satrda ushbu pozitsiyani qidirishni boshlash uchun qulay usulga yo'l qo'ymaydi. Ammo noqulay usul.

Ob'ekt regulyatorlari xususiyatlarga ega. Ulardan biri ipni o'z ichiga olgan manba. Yana biri boshqariladigan va ba'zi sharoitlarda, ba'zi holatlarda, ba'zi holatlarda boshlanadi.

Ushbu shartlar global G tanlovining mavjudligini va qidiruvlar usulidan foydalanib qidirish zarurligini o'z ichiga oladi. Quyidagi oqilona echim qo'shimcha dalillarni bajarishga ruxsat berishiga ruxsat berilishi mumkin, ammo mantiqiylik JavaSasdript Reallyatorkor interfeysidagi asosiy xususiyat emas.

Var Pody \u003d / Y / g; Naqsh.tastindex \u003d 3; Var match \u003d naqsh.Exec ("Xysinzy"); Konsol.log (Match.index); /// → 4 konsol.log (naqsh.lstindex); /// → 5.

Agar qidiruv muvaffaqiyatli bo'lsa, Ixtorlik qo'ng'iroqi findindex mulkini yangilaydi, shunda u topilgan yozuvdan keyin pozitsiyani ko'rsatadi. Agar muvaffaqiyat qolmasa, burchex nolga o'rnatilgan -, shuningdek, yaratilgan ob'ektdagi fasindex.

Jahon o'zgaruvchan muntazam va bir nechta IJ-ga qo'ng'iroqlarni amalga oshirishda ushbu avtomatik findindex yangilanishlar muammolarga olib kelishi mumkin. Sizning muntazam ravishda sizning oldingi qo'ng'iroqdan qolgan holatdan qidirishni boshlashingiz mumkin.

Var Digit \u003d / \\ d / g; Konsol.log (Digit.Exec ("Bu erda: 1")); /// → ["1"] konsol.log (Digit.Exec ("va hozir: 1"))); /// → null

G variantning yana bir qiziqarli ta'siri shundaki, u o'yin usulining ishini o'zgartiradi. Ushbu parametr bilan chaqirilganda, ulanish ishiga o'xshash qatorni qaytarishning o'rniga, u shablonning barcha yozuvlarini satrda kiritadi va topilgan substratsiyani qaytaradi.

Konsol.log ("banan" .Match (/ en / g)); /// → ["A", "A"]

Juda ehtiyotkorlik bilan global o'zgaruvchilar bilan. Qaerda kerak bo'lganda - siz varaqasini almashtirish yoki joylashtirilgan joylarni, ehtimol ular qo'llanilishi kerak bo'lgan barcha holatlar.

Kirish orqali tsikllar

Oddiy vazifa shablonning barcha yozuvlarini satrda satrda o'tishi uchun satrdagi barcha yozuvlarni tugatish va bajaring.

Var Kirish \u003d "Unda 3 ta raqam bilan tikilgan ... 42 va 88."; Var raqam \u003d / \\ b (\\ d +) \\ b / g; Var match; Vaqt (Match \u003dExec (kiritish) konsol.log ("Topilgan", "ON", Match.index); // → 3 dan 14 gacha // topildi 42 dan 33 // 88 dan 40 gacha topildi

Qiymatni tayinlash qiymatiga tayinlanganligi. Matchdan foydalanish \u003d Re.Exec (Kirish) dizayni sharti sifatida, biz har bir iteratsiyaning boshida qidiruvni amalga oshiramiz, natijani o'zgaruvchida saqlaymiz va barcha tasodiflar topilganda tsiklni tugatamiz.

INI fayllarini eshitish

Bo'limni oxirida tartibga soluvchilardan foydalanish vazifasini ko'rib chiqing. Tasavvur qiling, biz avtomatik rejimda bizning dushmanimiz haqida ma'lumot to'playdigan dastur yozamiz. (Men butun dasturni yozmayman, faqat faylni sozlash bilan o'qiydigan qism. Kechirasiz.) Fayl quyidagicha ko'rinadi:

Searchine \u003d http: //www.google.com/search? Q \u003d $ 1 Sidoslilik \u003d 9.7; Izohlar oldidan joy joylashtirilgan; Har bir bo'lim alohida dushmanning to'liq omiliga tegishli \u003d Larri Doe Type \u003d bassinchi \u003d httpecanavaverale \u003d gargamel tipice \u003d g'azablangan sehrgar \u003d / uy / muhijn / Dushmanlar / Gargamel

Fayl formati (bu juda keng qo'llaniladi va odatda INI deb nomlanadi), quyidagilar:

Bo'shliqlar va nuqta nuqtai nazaridan boshlanadigan qatorlar e'tiborga olinmaydi
- kvadrat qavs ichiga qo'yilgan qatorlar yangi bo'limni boshlaydi
- Alf -um-raqam identifikatorini o'z ichiga olgan qatorlar, undan keyin \u003d, ushbu bo'limda sozlamalarni qo'shish.

Qolgan hamma narsa noto'g'ri ma'lumotlar.

Bizning vazifamiz bunday satr qatorlarga, har birida mulk nomi va sozlamalar qatoriga aylantirishdir. Har bir bo'lim uchun sizga bitta ob'ekt kerak va yana bir bor - global parametrlar uchun faylning yuqori qismidan.

Faylni demontaj qilish kerak bo'lganligi sababli, faylni satrga sindirish yomon emas. Buning uchun biz 6-bobda biz string.split ("\\ n") dan foydalandik. Ba'zi operatsiyalar liniyani emas, balki \\ n va ikki - \\ r \\ n. Split usulida muntazam ravishda bahs olib boradi, biz chiziq / \\ r / n /, qatorlar orasida \\ n va \\ r \\ n-dan foydalanib, chiziqni ajratishimiz mumkin.

Funktsiya Funktsiya (string) (// yuqori darajadagi sozlamalar va yuqori darajadagi ob'ektdan boshlang. (NOM: NULL, Sertifikatlar :) Sertifikatlar :) Sertifikatlar :) Liniya) (Var match; Agar (/ \\ \\ / s *)? $ /)? (Liniya) (liniya) (qaytish;) boshqa if (/^ Band_mach.*: ) $$ /)) (Ismi: oylik maydonlari :););), agar (/ ^ watch / (\\ w) \u003d (*) $ /) ) ((Oqselyadek) (nomi: (Ism: Obuna)) (yangi xato ("Starte" ("Start" + "" + "" Oyoqlash ", noto'g'ri ma'lumotlar mavjud.);)

Kod barcha "Hozirgi bo'lim" bo'limini yangilash orqali barcha satrlarni o'tkazadi. Avvaliga muntazam / \\ ^ (;; *) yordamida chiziqni e'tiborsiz qoldirish mumkinligini tekshiradimi? $ /. Bu qanday ishlashini ko'rib chiqing? Qavslar orasidagi qism sharhlarga to'g'ri keladimi? Bu muntazam ravishda ba'zi bo'shliqlardan iborat qatorlarga to'g'ri keladimi?

Agar satr sharh bo'lmasa, kod yangi bo'lim boshlanadimi yoki yo'qligini tekshiradi. Ha bo'lsa, u keyingi turdagi sozlamalar qo'shilgan yangi ob'ektni yaratadi.

So'nggi mazmunli xususiyat - bu qator - bu oddiy sozlashdir va bu holda u joriy ob'ektga qo'shiladi.

Agar biron-bir variant ishlamagan bo'lsa, funktsiya xato beradi.

Shaxsiy umuman va umuman emas, balki butun sonning butun soniga to'g'ri keladi. Agar ulardan foydalanmasa, umuman kod ishlaydi, ammo ba'zida g'alati natija bo'ladi va bu xato kuzatuv qiyin bo'ladi.

Agar dizayn (o'yin \u003d strench.mach (... ...)) belgilangan tsiklda topshiriqni shart qilib ishlatadigan hiyla-nayrangga o'xshaydi. Ko'pincha siz o'yin qo'ng'irog'i muvaffaqiyatli bo'lishini bilmaysiz, shuning uchun siz faqat cheklangan blokda hosil bo'lgan ob'ektga kirishingiz mumkin. Agar tekshiruv zanjiri bo'lsa, biz chiroyli bo'lsa, biz o'zgaruvchining qidiruv natijasini tayinlamaymiz va darhol ushbu topshiriqni chek sifatida ishlatamiz.

Xalqaro belgilar

Tilning dastlabki amalga oshirilishi va keyingi "granitda" ni amalga oshirish tufayli, JavaScript ingliz tilida ro'y bermaydigan belgilar bilan muntazam ravishda ahmoqdir. Masalan, JavaScript regulyatori nuqtai nazaridan "harflar" ramzi ingliz alifbosining 26 harfidan biri bo'lishi mumkin va ba'zi sabablarga ko'ra ham ta'kidlangan. OT yoki b tipidagi harflar, noyob bo'lib, xatlar bilan bog'liq emas, \\ Vt bilan bir-biriga mos kelmang (va bu xat bilan).

Tarixiy tasodifga ko'ra, tarixan (bo'shliq) gramble deb hisoblanadigan barcha belgilar bilan bir-biriga to'g'ri keladi, shu jumladan ajralmas bo'shliq yoki mo'g'ul undoshli ajratuvchi kabi narsalar.

Ba'zi amalga oshirishda boshqa tillardagi regulyatorlar "Barcha tinish belgilari" yoki "boshqaruv belgilari" yoki "boshqaruv belgilari" kabi maxsus sintaksisga ega. Bunday toifalarni JavaScript-da qo'shish rejalari mavjud, ammo tez orada amalga oshirilganga o'xshaydi.

Natija

Doimiy muntazamlik, chiziqlardagi qidiruv naqshlarini ifodalovchi ob'ektlardir. Ular sintaksisidan ushbu shablonlarni ifoda etish uchun foydalanadilar.

/ ABC / Splement ketma-ketligi
// ro'yxatdagi har qanday belgi
/ [^ Abc] / ro'yxatdagi belgilar bundan mustasno
// har qanday bo'shliqning ramzi
/ x + / bir yoki bir nechta holatlar shablon x
/ x +? / Bir yoki undan ko'p hodisa, undead
/ x * / nol yoki undan ko'p holatlar
/ x? / nol yoki bittasi paydo bo'ladi
/ x (2.4) / ikki dan to'rttagacha vrach
/ (ABC) / guruh
/ A | b | c / bir nechta andozalar
/ \\ d / har qanday raqam
/ \\ w / har qanday harf-raqam belgisi ("harf")
/ \\ s / har qanday bo'sh belgi
/./ tarjima satridan tashqari har qanday belgi
/ \\ b / so'z chegarasi
/ ^ / Boshlash liniyasi
/ $ / Tugatish liniyasi

Doimiy ravishda sinov usulida, satrda naqsh mavjudligini tekshirish uchun. Barcha topilgan guruhlarni o'z ichiga olgan qatorni qaytaradigan ITRET usuli mavjud. Massiv indeks mulkiga ega, bu erda tasodifning belgilari ro'yxati.

Strings shablonlarni qidirish uchun mos keladigan usulda va faqat kirishning dastlabki pozitsiyasini qaytaradigan qidirish usuli mavjud. Almashtirish usuli shablonning boshqa satriga kirishni o'zgartirishi mumkin. Bundan tashqari, siz shablon va topilgan guruhlar asosida almashtirish liniyasini yaratadigan almashtirgichda funktsiyani o'tkazib yuborishingiz mumkin.

Regutyorlar yopilgan chiziqdan keyin yozilgan sozlamalar mavjud. Men odatiy ishni muntazam qilaman va g imkoniyatli global qiladi, bu boshqa narsalarning barchasini emas, balki barcha topilgan narsalarni almashtirishga olib keladi.

RegExp dizayneri muntazam qatorlarni yaratish uchun ishlatilishi mumkin.

Doimiy - noqulay tutqichli o'tkir vositasi. Ular ba'zi vazifalarni juda soddalashtirishadi va boshqa vazifalarni yoki murakkab vazifalarni hal qilib bo'lmaydi. Oddiy muntazamlikdan foydalanish qobiliyatining bir qismi ularda mo'ljallanmagan vazifani bajarishga vasvasaga qarshi turishdir.

Mashqlar

Muvaffaqiyatlarni hal qilishda siz tushunarsiz ishlarga ega bo'lasiz va ba'zida siz ba'zi tartibga soluvchilarning oldindan aytib bo'lmaydigan xatti-harakatlarini ko'rib, umidsizlikka tushasiz. Ba'zan bu Diqqatni onlayn xizmati orqali muntazam ravishda deb bilishga yordam beradi, u erda o'z vizualizatsiyasini ko'rishingiz va kerakli effekt bilan solishtirishingiz mumkin.
Doimiy golf
Kodeksda "Golf" belgisi minimal belgilar bilan ifodalashingiz kerak bo'lgan o'yin deyiladi. Doimiy Golf - bu ma'lum bir shablonni qidirish uchun eng kichik regulyatorlarni yozish bo'yicha amaliy mashq, va faqat uni.

Har bir vositalar uchun ularni ketma-ket tekshirish uchun muntazam yozish uchun yozing. Muntazam ravishda ushbu ko'rsatilgan substingni topishi kerak. Agar aytilmasa, so'zlar chegaralari haqida tashvishlanmang. Doimiy ravishda ishlayotganingizda, uni qisqartirishga harakat qiling.

Mashina va mushuk.
- Pop va Prop
- temir, parom va Ferrari
- iOS bilan tugaydigan har qanday so'z
- joy, keyin nuqta, vergul, yo'g'on ichak yoki vergul.
- Word uzunligi oltita harf
- harfsiz so'zsiz

// Doimiy Vermiy (/.../, ["Mening mashinam", "Yomon mushuklar"], "Kamper", "Yuqori san'ati"]) kiriting); tekshiring (/..., ["Pop madaniyati", "Mad Prots"]; Tekshiring (/..., ["Feret", "Ferrari", "Ferrrrum"], "AVRRRRURAT", "AVITRUM", "AVXRREM", "AVRRRRRRRRRREKTRES"])) " tekshiring (/.../, ["Qanday mazali", "keng xonali"], ["xarobali", "ong"]); Tekshiring (/.../, ["yomon tinish belgilari"], ["nuqtadan qochish]))); tekshiring (/.../, ["Hotentotologen"], ["Yo'q", "chirigan tenten"]; tekshiring (/.../, ["Red Plyippus", "Yonli uya"], ["Erli yotish", "APE"]); Funktsiya tekshiring (RegExp, Ha, Yo'q) (// tugallanmagan mashqlar (regxp.Source \u003d\u003d '(... ») qaytish; Ha.Forch.Test (lar) konsoli .LOG ("+ S +" "" "" "" "" "" "" "" "" "" "(funktsiya) (funktsiya) (Funktsiya) (funktsiya) (funktsiya)) konsol (" Kutilmagan kirish "+" )));)

Matndagi tirnoq
Aytaylik, siz hikoyani yozdingiz, va har bir joyda dialoglarni belgilashda bitta tirnoqlardan foydalanilgan. Endi siz dialoglarning tirnoqlarini ikki baravar almashtirishni xohlaysiz va turdagi qisqartmada bittadan qoldirishni xohlaysiz.

Ushbu tirnoqlarni ajratib turadigan va almashtirishning almashtirish usuliga qo'ng'iroqni yozadigan shablon bilan keling.

Yana raqamlar
Raqamlarning ketma-ketligi oddiy oddiy / \\ d + / d

Faqatgina JavaScript Style-da qayd etilgan raqamlarni topadigan ifoda yozing. U raqamdan oldin minus yoki plyusgacha bo'lgan minus yoki plyus oldidan va eksponentning eksponentsial yozuvi - yana ortiqcha yoki minus bilan. Shuni ham ta'kidlang, shunga e'tibor bering, nuqtada yoki undan keyin albatta raqamlar bo'lishi shart emas, lekin raqam bir nuqtadan iborat bo'lishi mumkin emas. Ya'ni, .5 yoki 5. - ruxsat etilgan raqamlar, va bir nuqta o'zi - yo'q.

// muntazam ravishda muntazam ravishda kiriting. Var raqam \u003d / \u003d $ /; // Testlar: [ "1", "-1", "+15", "1.55", ".5", "5.", "1.3E2", "1E-4", "1E + 12"] .Fortah (funktsiya (funktsiya (lar) (agar (! Raqamli raqam) konsol.log ("+ S +" ""))); ["1A", "+ -1", "1.2.3", "1 + 1", "1.5", ""] "". "Forital (funktsiya) (Agar (raqami.Test (S)) konsol.log ("Noto'g'ri qabul qilingan" "+ S +" "");