⊗jsSpRERMC 127 of 294 menu

JavaScript regular ifodalarida replace metodida callback

Replace metodi ikkinchi parametr sifatida nafaqat satrni, balki callback funksiyasini ham qabul qilishi mumkin, bu funksiya topilgan har bir moslik uchun qo'llaniladi. Regulyar ifoda topgan har bir pastki satr, ushbu funksiya tomonidan aynan o'sha pastki satr uchun qaytarilgan natija bilan almashtiriladi.

Ushbu funksiyaga parametrlarni uzatish mumkin: birinchi parametrga topilgan satr joylashtiriladi, ikkinchi parametrga - birinchi guruh (pocket), uchinchi parametrga - ikkinchi guruh va hokazo - regulyar ifodada qancha guruh bo'lsa, shuncha parametr qilish mumkin.

Oxirgidan oldingi parametrga topilgan moslikning pozitsiyasi joylashtiriladi, oxirgisiga esa - qidiruv amalga oshirilayotgan butun satr.

Bularning barchasi qanday ishlashini - amaliy misollar orqali ko'rib chiqamiz.

Misol

Sonlar berilgan satr berilgan bo'lsin:

let str = '2 3 4 5';

Keling, bu sonlarni ularning kvadratlari bilan almashtiramiz. Boshlanish uchun keling, callback funksiyasida sonlarimizni navbat bilan konsolga chiqaramiz:

str.replace(/\d+/g, function(match) { console.log(match); });

Bizning kod avval '2' ni, keyin '3', '4' va '5' ni chiqaradi. Ya'ni match o'zgaruvchisiga regulyar ifoda topgan o'sha satrlar ketma-ketlikda tushadi.

Keling, masalani oxirigacha yechamiz - match ni kvadratga ko'taramiz va return yordamida qaytaramiz. Topilgan ikkilik uchun 4 qaytariladi va ikkilik to'rtlikka almashtiriladi, topilgan uchtalik uchun 9 qaytariladi va uchtalak to'qqizlikka almashtiriladi - va hokazo:

let result = str.replace(/\d+/g, function (match) { return match**2; }); console.log(result); // chiqaradi '4 9 16 25'

Misol

Endi satrda '2+3=' ko'rinishidagi konstruksiyalar berilgan bo'lsin:

let str = '2+3= 4+5= 6+7=';

Keling, tenglikdan keyin mos keladigan sonlar yig'indisi qo'yilsin. Ya'ni bizning satrimiz quyidagiga aylanishi kerak:

'2+3=5 4+5=9 6+7=13'

Masalani yechish uchun keling, yana tajriba o'tkazamiz - birinchi va ikkinchi qo'shiluvchilarni alohida guruhlarga ajratamiz:

str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) { console.log(match0, match1, match2); });

Endi masalani yakuniy yechamiz: har bir topilgan pastki satr uchun birinchi va ikkinchi guruhlarni yig'amiz, nolinchi guruhni (topilgan satr, masalan '2+3=') olamiz, unga natija qo'shamiz va bularning hammasini return orqali qaytaramiz:

let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) { let sum = Number(match1) + Number(match2); return match0 + sum; }); console.log(result);

Amaliy masalalar

Berilgan satr:

let str = 'aaa [2] bbb [3] ccc [12] ddd';

Qavs ichida turgan sonlarni toping va ularni ikki baravar oshiring. Ya'ni bizning satrdan quyidagi hosil bo'lishi kerak:

'aaa [4] bbb [6] ccc [24] ddd'

Berilgan satr:

let str = '123 456 789';

Barcha sonlarni toping va ularning raqamlarini teskari tartibda yozing. Ya'ni bizning satrdan quyidagi hosil bo'lishi kerak:

'321 654 987'

Sanalar berilgan satr:

let str = '31.12.2025 30.11.2024 29.10.2023';

Barcha sanalarni toping va ularni boshqa formatga o'zgartiring, quyidagi satr hosil bo'lishi uchun:

'2025-12-31 2024-11-30 2023-10-29'
kkkaidnlro