رشته‌ها و متن

ساخت رشته، متدهای پرکاربرد رشته، جست‌وجو، استخراج و جایگزینی متن، Template Literal و کار با Unicode

رشته چیست؟

رشته (String) دنباله‌ای از کاراکترهاست که متن را نمایش می‌دهد. رشته‌ها در جاوا اسکریپت غیرقابل تغییر (Immutable) هستند — یعنی متدها همیشه رشته جدید می‌سازند:

// سه روش ساخت رشته:
const s1 = "دابل کوتیشن";     // رایج‌ترین
const s2 = "تک کوتیشن";  // معادل
const s3 = new String("شیء رشته"); // ❌ نکنید — object می‌سازد

// غیرقابل تغییر بودن:
let name = "javascript";
name[0] = "J"; // بی‌اثر — خطا نمی‌دهد ولی تغییر هم نمی‌دهد
console.log(name); // javascript

// رشته جدید بسازید:
name = "J" + name.slice(1);
console.log(name); // Javascript

ویژگی‌های رشته

رشته ویژگی length دارد و با index به کاراکترها دسترسی دارید:

const str = "Hello";

console.log(str.length);    // 5 — تعداد کاراکتر
console.log(str[0]);        // H
console.log(str[4]);        // o
console.log(str[10]);       // undefined — خارج از محدوده
console.log(str.at(-1));    // o — شمارش از انتها (ES2022)
console.log(str.charAt(0)); // H — روش قدیمی
console.log(str.charCodeAt(0)); // 72 — کد UTF-16

تغییر حروف بزرگ و کوچک

const text = "JavaScript";
console.log(text.toUpperCase()); // JAVASCRIPT
console.log(text.toLowerCase()); // javascript

// استفاده عملی — مقایسه بدون حساسیت به حروف:
const input = "YES";
if (input.toLowerCase() === "yes") {
    console.log("تایید شد");
}

جست‌وجو در رشته

const sentence = "جاوا اسکریپت زبان وب است";

// شامل بودن:
console.log(sentence.includes("وب"));      // true
console.log(sentence.includes("پایتون"));  // false

// شروع و پایان:
console.log(sentence.startsWith("جاوا")); // true
console.log(sentence.endsWith("است"));    // true

// پیدا کردن index:
console.log(sentence.indexOf("زبان"));    // 13 — اولین جایگاه
console.log(sentence.indexOf("وب", 10));  // جست‌وجو از index 10
console.log(sentence.lastIndexOf("ا"));   // آخرین جایگاه

// پیدا نشد؟
console.log(sentence.indexOf("xxx"));     // -1

// جست‌وجوی مدرن (ES2023) — از انتها:
console.log(sentence.lastIndexOf("ا"));   // از آخر می‌گردد

استخراج متن

const str = "JavaScript";

// slice(start, end) — رایج‌ترین، منفی قبول می‌کند:
console.log(str.slice(0, 4));   // Java
console.log(str.slice(4));      // Script
console.log(str.slice(-6));     // Script — 6 کاراکتر آخر
console.log(str.slice(-10, -6)); // Java

// substring(start, end) — منفی را 0 در نظر می‌گیرد:
console.log(str.substring(0, 4));  // Java
console.log(str.substring(4, 0));  // Java — آرگومان‌ها را جابه‌جا می‌کند!

// substr(start, length) — قدیمی، دومی طول است:
console.log(str.substr(0, 4)); // Java

جایگزینی متن

let msg = "من PHP دوست دارم. PHP عالی است.";

// فقط اولین مورد:
console.log(msg.replace("PHP", "جاوا اسکریپت"));
// من جاوا اسکریپت دوست دارم. PHP عالی است.

// همه موارد (ES2021):
console.log(msg.replaceAll("PHP", "جاوا اسکریپت"));
// من جاوا اسکریپت دوست دارم. جاوا اسکریپت عالی است.

// با Regex — جایگزینی همه (روش قدیمی):
console.log(msg.replace(/PHP/g, "جاوا اسکریپت"));

تقسیم و اتصال رشته

// split — تبدیل رشته به آرایه:
const csv = "علی,مریم,رضا,سارا";
const names = csv.split(",");
console.log(names);        // ["علی", "مریم", "رضا", "سارا"]
console.log(names[2]);     // رضا

// join — اتصال آرایه به رشته:
console.log(names.join(" و ")); // علی و مریم و رضا و سارا

// تقسیم به حروف:
console.log("abc".split("")); // ["a", "b", "c"]

// repeat — تکرار رشته:
console.log("=-".repeat(5)); // =-=-=-=-=
console.log("0".repeat(3));  // 000

// concat — اتصال:
console.log("سلام".concat(" ", "دنیا")); // سلام دنیا

حذف فاصله‌ها

const dirty = "   سلام دنیا   ";

console.log(dirty.trim());       // "سلام دنیا" — هر دو طرف
console.log(dirty.trimStart());  // "سلام دنیا   " — فقط اول
console.log(dirty.trimEnd());    // "   سلام دنیا" — فقط آخر

// استفاده عملی — اعتبارسنجی ورودی:
const userInput = "  ali@email.com  ";
const email = userInput.trim();
if (email.includes("@")) {
    console.log("ایمیل معتبر است:", email);
}

تکمیل رشته (Padding)

// padStart و padEnd — پر کردن با کاراکتر مشخص:
console.log("5".padStart(3, "0"));  // 005
console.log("5".padEnd(3, "*"));    // 5**

// ساخت جدول مرتب در کنسول:
const products = [
    ["سیب", 25000],
    ["شیر", 18000],
    ["نان", 10000],
];
for (const [name, price] of products) {
    console.log(name.padEnd(10, ".") + String(price).padStart(8, " ") + " تومان");
}
// سیب......... 25000 تومان
// شير........ 18000 تومان

Template Literal

با backtick (`) می‌سازند و امکان درج متغیر و چندخطی بودن دارند:

const user = "علی";
const score = 18.5;

// درج متغیر با ${}:
const msg = `کاربر ${user} نمره ${score} گرفت`;
console.log(msg); // کاربر علی نمره 18.5 گرفت

// چندخطی بدون n\:
const html = `<div>
    <h1>سلام ${user}</h1>
</div>`;

// عبارت داخل ${}:
console.log(`جمع: ${2 + 3}`);        // جمع: 5
console.log(`وضعیت: ${score >= 10 ? "قبول" : "مردود"}`);

// مقایسه با روش قدیمی:
const old = "کاربر " + user + " نمره " + score + " گرفت"; // شلوغ!

Unicode و UTF-16

جاوا اسکریپت متن را با کدگذاری UTF-16 ذخیره می‌کند. هر کاراکتر یک کدپوینت (Code Point) دارد:

// کد کاراکتر:
console.log("A".codePointAt(0));        // 65
console.log("a".codePointAt(0));        // 97
console.log("س".codePointAt(0));        // 1587

// ساخت کاراکتر از کد:
console.log(String.fromCodePoint(65));  // A
console.log(String.fromCodePoint(128512)); // 😀

// مشکل کاراکترهای بزرگ (بیش از 16 بیت):
const emoji = "😀";
console.log(emoji.length);     // 2 — دو code unit دارد!
console.log([...emoji].length); // 1 — با spread درست می‌شود

// پیمایش درست رشته:
for (const ch of "a😀b") {
    console.log(ch); // a، 😀، b — for...of کدپوینت می‌دهد
}

رمزگذاری و رمزگشایی متن

// برای URL — کاراکترهای خاص:
const q = "جست‌وجوی فارسی";
console.log(encodeURIComponent(q));
// "%D8%AC%D8%B3%D8%AA..."

const url = `https://example.com/search?q=${encodeURIComponent(q)}`;

// رمزگشایی:
console.log(decodeURIComponent("%D8%AC%D8%B3%D8%AA")); // جست

// Base64 — با atob و btoa:
const encoded = btoa("Hello");   // "SGVsbG8="
console.log(atob(encoded));       // "Hello"

// نکته: btoa فقط ASCII — برای فارسی:
const faEncoded = btoa(unescape(encodeURIComponent("سلام")));
const faDecoded = decodeURIComponent(escape(atob(faEncoded)));
console.log(faDecoded); // سلام

جدول متدهای مهم

متدکار
includes / startsWith / endsWithجست‌وجوی بولی
indexOf / lastIndexOfیافتن جایگاه
slice / substringاستخراج بخشی از متن
toUpperCase / toLowerCaseتغییر حروف
trim / trimStart / trimEndحذف فاصله
replace / replaceAllجایگزینی
splitتبدیل به آرایه
padStart / padEndتکمیل رشته
repeatتکرار
at / charAtدسترسی به کاراکتر

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل جاوا اسکریپت است.

ابزارهای مرتبط