9-bo‘lim
Satrlar bilan ishlash
Satr metodlari, qidirish va almashtirish, bo'lish va birlashtirish, shablon satrlari, Unicode va muntazam ifodalar bilan tanishuv.
Ushbu bo‘lim mundarijasi
Foydalanuvchi kiritadigan har bir ma'lumot - satr. Ular bilan ishlashni bilish har kunlik ehtiyoj.
Asosiy xossalar #
const matn = "Assalomu alaykum";
console.log("Uzunligi :", matn.length);
console.log("Birinchi :", matn[0]);
console.log("Oxirgi :", matn.at(-1));
console.log("Katta harf :", matn.toUpperCase());
console.log("Kichik harf:", matn.toLowerCase());
console.log("Asl matn :", matn);
Uzunligi : 16
Birinchi : A
Oxirgi : m
Katta harf : ASSALOMU ALAYKUM
Kichik harf: assalomu alaykum
Asl matn : Assalomu alaykum
const matn = "salom";
matn[0] = "S";
console.log(matn); // "salom" - o'zgarmadi
Satr elementini o'zgartirib bo'lmaydi. Har bir metod yangi satr qaytaradi, aslini o'zgartirmaydi.
Shuning uchun natijani albatta o'zlashtiring:
let matn = "salom";
matn.toUpperCase(); // natija tashlab yuborildi
console.log(matn); // "salom"
matn = matn.toUpperCase(); // to'g'ri
console.log(matn); // "SALOM"
Bu massivdan farqi: royxat.push() aslini o'zgartiradi, satr
metodlari esa hech qachon.
Qidirish #
const jumla = "JavaScript - veb dasturlash tili";
console.log("includes :", jumla.includes("veb"));
console.log("startsWith :", jumla.startsWith("Java"));
console.log("endsWith :", jumla.endsWith("tili"));
console.log("indexOf :", jumla.indexOf("veb"));
console.log("indexOf yo'q:", jumla.indexOf("Python"));
console.log("lastIndexOf:", jumla.lastIndexOf("a"));
console.log("search :", jumla.search(/dastur/));
includes : true
startsWith : true
endsWith : true
indexOf : 13
indexOf yo'q: -1
lastIndexOf: 24
search : 17
Kesib olish #
const matn = "JavaScript";
console.log("slice(0, 4) :", matn.slice(0, 4));
console.log("slice(4) :", matn.slice(4));
console.log("slice(-6) :", matn.slice(-6));
console.log("slice(-6, -3) :", matn.slice(-6, -3));
console.log("substring(0,4):", matn.substring(0, 4));
console.log("substring teskari:", matn.substring(4, 0));
console.log("slice teskari :", matn.slice(4, 0));
slice(0, 4) : Java
slice(4) : Script
slice(-6) : Script
slice(-6, -3) : Scr
substring(0,4): Java
substring teskari: Java
slice teskari :
slice va substring farqislice | substring | |
|---|---|---|
| Manfiy indeks | Oxiridan sanaydi | 0 deb qabul qiladi |
| Argumentlar teskari | Bo'sh satr | Almashtiradi |
substring(4, 0) argumentlarni jimgina almashtirib substring(0, 4)
ga aylantiradi - bu xatoni yashiradi.
slice ni ishlating - u massivdagi slice bilan bir xil
ishlaydi va manfiy indeksni qo'llab-quvvatlaydi.
Eskirgan substr metodi ham bor (uzunlik oladi, oxirgi indeks
emas) - uni ishlatmang, u standartdan chiqarilgan.
Almashtirish #
const matn = "olma, olma, anor";
console.log("replace :", matn.replace("olma", "uzum"));
console.log("replaceAll :", matn.replaceAll("olma", "uzum"));
console.log("regex bilan:", matn.replace(/olma/g, "uzum"));
console.log("Asl saqlandi:", matn);
// Bo'shliqlarni tozalash
const kirim = " Husanboy ";
console.log("trim : [" + kirim.trim() + "]");
console.log("trimStart : [" + kirim.trimStart() + "]");
console.log("trimEnd : [" + kirim.trimEnd() + "]");
replace : uzum, olma, anor
replaceAll : uzum, uzum, anor
regex bilan: uzum, uzum, anor
Asl saqlandi: olma, olma, anor
trim : [Husanboy]
trimStart : [Husanboy ]
trimEnd : [ Husanboy]
replace faqat birinchisini almashtiradiBu eng ko'p uchraydigan satr xatosi:
"a-b-c".replace("-", "+") // "a+b-c" - faqat birinchisi
Hammasini almashtirish uchun:
"a-b-c".replaceAll("-", "+") // "a+b+c" - ES2021
"a-b-c".replace(/-/g, "+") // "a+b+c" - eski usul
g bayrog'i "global" - hamma mosliklarni topadi.
Diqqat: replaceAll ga g bayroqsiz regex bersangiz xato
beradi:
"a-b".replaceAll(/-/, "+") // TypeError
Bo'lish va birlashtirish #
const csv = "Husanboy,25,Namangan";
const qismlar = csv.split(",");
console.log("split :", qismlar);
console.log("Ism :", qismlar[0]);
console.log("Harflarga :", "abc".split(""));
console.log("Bo'shliq :", "bir ikki uch".split(" "));
console.log("Chegara :", "a,b,c,d".split(",", 2));
console.log("join :", qismlar.join(" | "));
// Ko'p qatorli matnni qatorlarga
const kop = "birinchi\nikkinchi\nuchinchi";
console.log("Qatorlar :", kop.split("\n").length, "ta");
split : [ 'Husanboy', '25', 'Namangan' ]
Ism : Husanboy
Harflarga : [ 'a', 'b', 'c' ]
Bo'shliq : [ 'bir', 'ikki', 'uch' ]
Chegara : [ 'a', 'b' ]
join : Husanboy | 25 | Namangan
Qatorlar : 3 ta
To'ldirish va takrorlash #
console.log("padStart:", "7".padStart(3, "0"));
console.log("padEnd :", "Ism".padEnd(10, ".") + "qiymat");
console.log("repeat :", "-".repeat(20));
// Jadval chizish
const qatorlar = [
["Mahsulot", "Narx"],
["Non", "5000"],
["Sut", "12000"]
];
for (const [nom, narx] of qatorlar) {
console.log(nom.padEnd(12) + narx.padStart(8));
}
// Vaqtni formatlash
const soat = 9;
const daqiqa = 5;
console.log(`${String(soat).padStart(2, "0")}:${String(daqiqa).padStart(2, "0")}`);
padStart: 007
padEnd : Ism.......qiymat
repeat : --------------------
Mahsulot Narx
Non 5000
Sut 12000
09:05
Shablon satrlari #
const ism = "Malika";
const yosh = 22;
// Ifoda ham yozish mumkin
console.log(`${ism}, ${yosh} yosh, ${yosh >= 18 ? "voyaga yetgan" : "yosh"}`);
console.log(`Kelasi yil: ${yosh + 1}`);
// Ko'p qatorli
const xat = `Hurmatli ${ism},
Sizning arizangiz qabul qilindi.
Rahmat!`;
console.log(xat);
// Ichma-ich shablon
const mahsulotlar = ["olma", "anor"];
console.log(`Ro'yxat: ${mahsulotlar.map((m) => `[${m}]`).join(" ")}`);
Malika, 22 yosh, voyaga yetgan
Kelasi yil: 23
Hurmatli Malika,
Sizning arizangiz qabul qilindi.
Rahmat!
Ro'yxat: [olma] [anor]
Unicode va uzunlik #
const oddiy = "salom";
const emoji = "salom 👋";
const uzbekcha = "o'zbek tili";
console.log("Oddiy uzunlik :", oddiy.length);
console.log("Emoji uzunlik :", emoji.length);
console.log("Emoji belgilar:", [...emoji].length);
console.log("O'zbekcha :", uzbekcha.length);
// Emoji ni bo'lish xavfli - yarim belgi qoladi
const buzilgan = emoji.slice(0, 7);
const toliqEmoji = [...emoji].at(-1);
console.log("Buzilgan uzunlik:", buzilgan.length, "birlik");
console.log("Emoji butunmi? :", buzilgan.endsWith(toliqEmoji));
console.log("To'g'ri kesish :", [...emoji].slice(0, 7).join(""));
Oddiy uzunlik : 5
Emoji uzunlik : 8
Emoji belgilar: 7
O'zbekcha : 11
Buzilgan uzunlik: 7 birlik
Emoji butunmi? : false
To'g'ri kesish : salom 👋
length belgilar sonini bermaydiJavaScript satrlari UTF-16 kod birliklari ketma-ketligi. Ko'pchilik belgi bitta birlik egallaydi, lekin emoji va ba'zi belgilar ikkitasini oladi.
"👋".length // 2 - bitta belgi, ikkita birlik
Natijada:
lengthnoto'g'ri belgi sonini beradi;sliceemoji ni o'rtasidan kesib buzishi mumkin;[0]yarim belgini qaytaradi.
Belgilar bo'yicha ishlash uchun satrni massivga aylantiring:
[...matn] // to'g'ri bo'linadi
Array.from(matn) // xuddi shunday
Yanada murakkab holatlar bor - masalan bayroq emojilari va
oila emojilari bir necha belgidan iborat. Ular uchun
Intl.Segmenter ishlatiladi:
const bolgich = new Intl.Segmenter("uz", { granularity: "grapheme" });
[...bolgich.segment(matn)].length
Amaliy maslahat: foydalanuvchi kiritgan matn uzunligini
cheklaganda [...matn].length ishlating - aks holda emoji
yozgan foydalanuvchi ikki barobar kam belgi yoza oladi.
Taqqoslash va saralash #
const a = "olma";
const b = "Olma";
console.log("=== bilan :", a === b);
console.log("Kichik harfda :", a.toLowerCase() === b.toLowerCase());
console.log("localeCompare :", a.localeCompare(b, "uz", { sensitivity: "base" }) === 0);
const shaharlar = ["Toshkent", "andijon", "Namangan"];
console.log("Oddiy sort :", [...shaharlar].sort());
console.log("localeCompare:", [...shaharlar].sort((x, y) =>
x.localeCompare(y, "uz", { sensitivity: "base" })));
=== bilan : false
Kichik harfda : true
localeCompare : true
Oddiy sort : [ 'Namangan', 'Toshkent', 'andijon' ]
localeCompare: [ 'andijon', 'Namangan', 'Toshkent' ]
Muntazam ifodalar bilan tanishuv #
const matn = "Telefon: +998 90 123 45 67, email: [email protected]";
// Raqamlarni topish
console.log("Raqamlar:", matn.match(/\d+/g));
// Email topish
const email = matn.match(/[\w.]+@[\w.]+\.\w+/);
console.log("Email :", email[0]);
// Tekshirish
const parol = "Kuchli123";
console.log("8+ belgi :", /.{8,}/.test(parol));
console.log("Raqam bor :", /\d/.test(parol));
console.log("Katta harf :", /[A-Z]/.test(parol));
// Tozalash
console.log("Faqat raqam :", "+998 (90) 123-45-67".replace(/\D/g, ""));
Raqamlar: [ '998', '90', '123', '45', '67' ]
Email : [email protected]
8+ belgi : true
Raqam bor : true
Katta harf : true
Faqat raqam : 998901234567
| Belgi | Ma'nosi | |
|---|---|---|
\d | Raqam (0-9) | |
\D | Raqam emas | |
\w | Harf, raqam yoki _ | |
\s | Bo'shliq, tab, yangi qator | |
. | Istalgan belgi | |
+ | Bir yoki ko'p marta | |
* | Nol yoki ko'p marta | |
? | Nol yoki bir marta | |
{3} | Aynan 3 marta | |
{2,5} | 2 dan 5 gacha | |
^ | Satr boshi | |
$ | Satr oxiri | |
[abc] | a, b yoki c | |
[^abc] | a, b, c dan boshqa | |
(...) | Guruh | |
| ` | ` | Yoki |
Bayroqlar: g (hammasi), i (registrsiz), m (ko'p qatorli).
Ogohlantirish: emailni to'liq tekshiradigan regex juda
murakkab va amalda foydasiz. Formada type="email" ishlating
va haqiqiy tekshiruvni tasdiqlash xati orqali qiling.
Amaliy misol: matn tahlili #
const maqola = `JavaScript veb dasturlash tili. JavaScript brauzerda
ishlaydi. Node.js yordamida JavaScript serverda ham ishlaydi.`;
const sozlar = maqola
.toLowerCase()
.replace(/[.,]/g, "")
.split(/\s+/)
.filter((s) => s.length > 0);
console.log("Jami so'zlar :", sozlar.length);
console.log("Noyob so'zlar:", new Set(sozlar).size);
// Eng ko'p uchraydigan so'zlar
const sanoq = {};
for (const soz of sozlar) {
sanoq[soz] = (sanoq[soz] ?? 0) + 1;
}
const eng = Object.entries(sanoq)
.sort((a, b) => b[1] - a[1])
.slice(0, 3);
console.log("Eng ko'p:");
for (const [soz, soni] of eng) {
console.log(` ${soz.padEnd(12)} ${soni} marta`);
}
Jami so'zlar : 13
Noyob so'zlar: 10
Eng ko'p:
javascript 3 marta
ishlaydi 2 marta
veb 1 marta
- Satr o'zgarmasligini
matn[0] = "X"bilan isbotlang. slicevasubstringni manfiy indeks bilan taqqoslang.replacefaqat birinchisini almashtirishini ko'rsating.splitbilan CSV qatorini qismlarga ajrating.padStartbilan vaqtni09:05ko'rinishida chiqaring.- Shablon satri bilan ko'p qatorli xat yozing.
- Emoji li satr uzunligini ikki usulda o'lchang.
localeComparebilan registrsiz saralang.- Regex bilan matndan barcha raqamni ajratib oling.
- Matndagi eng ko'p uchraydigan uch so'zni toping.
Xulosa #
- Satrlar o'zgarmas - metodlar yangi satr qaytaradi.
sliceni ishlating;substringmanfiy indeksni tushunmaydi.replacefaqat birinchisini,replaceAllhammasini.splitvajoin- satr bilan massiv o'rtasidagi ko'prik.padStartraqamlarni formatlashda juda qulay.- Shablon satrlari birlashtirishning standart usuli.
lengthUTF-16 birliklarini sanaydi, belgilarni emas.- Emoji uchun
[...matn]bilan bo'ling. - Matnni
localeComparebilan saralang. - Regex da
\d,\w,\svagbayrog'i eng ko'p ishlatiladi. - Emailni regex bilan to'liq tekshirmang - tasdiqlash xati yuboring.
Keyingi bo'limda sonlar, sana va Math bilan ishlaymiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.