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'