Boshdan keyin kiriting
Bizda HTML hujjati bo’lgan qator mavjud.
<body>
tegidan keyin darhol <h1>Salom</h1>
qo`shiladigan oddiy iborani yozing. Teg atributlarga ega bo’lishi mumkin.
Masalan:
let regexp = /sizning muntazam ifodangiz/;
let str = `
<html>
<body style="height: 200px">
...
</body>
</html>
`;
str = str.replace(regexp, `<h1>Salom</h1>`);
Shundan so’ng “str” qiymati quyidagicha bo’lishi kerak:
<html>
<body style="height: 200px">
<h1>Salom</h1>
...
</body>
</html>
<body>
teg’idan keyin qo’shish uchun avval uni topishimiz kerak. Buning uchun <body.*?>
muntazam ifoda naqshidan foydalanishimiz mumkin.
Ushbu vazifada biz <body>
teg’ini o’zgartirishimiz shart emas. Faqat undan keyin matn qo’shishimiz kerak.
Buni qanday qilishimiz mumkin:
let str = '...<body style="...">...';
str = str.replace(/<body.*?>/, '$&<h1>Salom</h1>');
alert(str); // ...<body style="..."><h1>Salom</h1>...
Almashtirish satrida $&
moslikning o’zini anglatadi, ya’ni <body.*?>
ga mos keladigan manba matn qismi. U o’zi va <h1>Salom</h1>
bilan almashtiriladi.
Muqobil variant orqaga qarashdan foydalanishdir:
let str = '...<body style="...">...';
str = str.replace(/(?<=<body.*?>)/, `<h1>Salom</h1>`);
alert(str); // ...<body style="..."><h1>Salom</h1>...
Ko’rib turganimizdek, bu regexpda faqat orqaga qarash qismi bor.
U quyidagicha ishlaydi:
- Matndagi har bir pozitsiyada.
- U
<body.*?>
bilan boshlanganini tekshiradi. - Agar shunday bo’lsa, bizda moslik bor.
<body.*?>
tegi qaytarilmaydi. Ushbu regexp natijasi tom ma’noda bo’sh satrdir, lekin u faqat <body.*?>
bilan boshlangan pozitsiyalarda mos keladi.
Shunday qilib, u <body.*?>
bilan boshlangan "bo’sh qator"ni <h1>Salom</h1>
bilan almashtiradi. Bu <body>
dan keyin qo’shishdir.
P.S. s
va i
kabi regexp bayroqlari ham foydali bo’lishi mumkin: /<body.*?>/si
. s
bayrog’i nuqta .
ni yangi qator belgisiga mos kelishini ta’minlaydi va i
bayrog’i <body>
ni <BODY>
ga ham katta-kichik harflarni farqlamasdan mos kelishini ta’minlaydi.