درس 16 از 24

پیدا کردن موقعیت زیررشته در JavaScript با indexOf() | مثال و نکات مهم

بخش: کار با رشته در جاوااسکریپت

وقتی با رشته‌ها در جاوااسکریپت کار می‌کنید، ممکن است مواقعی پیش بیاید که لازم داشته باشید جایگاه (position) یک زیررشته (substring) مشخص را درون یک رشته‌ی بزرگ‌تر پیدا کنید.

زیررشته (substring) دنباله‌ای از کاراکترهاست که داخل یک رشته‌ی بزرگ‌تر ظاهر می‌شود. برای مثال، در رشته‌ی hello world، کلمات hello و world زیررشته هستند.

برای پیدا کردن موقعیت یک زیررشته داخل یک رشته، می‌توانید از متد indexOf() استفاده کنید. متد indexOf() در جاوااسکریپت به شما اجازه می‌دهد یک زیررشته را داخل یک رشته جستجو کنید.

اگر زیررشته پیدا شود، indexOf() ایندکس (یا موقعیت) اولین رخداد (first occurrence) آن زیررشته را برمی‌گرداند. اگر زیررشته پیدا نشود، indexOf() مقدار -1 را برمی‌گرداند که نشان می‌دهد جستجو ناموفق بوده است.

متد indexOf() دو آرگومان می‌گیرد: اولی زیررشته‌ای است که می‌خواهید داخل رشته‌ی بزرگ‌تر پیدا کنید، و دومی یک موقعیت شروع اختیاری برای جستجو است. اگر موقعیت شروع را وارد نکنید، جستجو از ابتدای رشته آغاز می‌شود.

در اینجا، آرگومان (argument) یعنی مقداری که وقتی یک تابع یا متد را صدا می‌زنید به آن می‌دهید تا آن تابع یا متد بتواند با استفاده از اطلاعات مشخصی که شما فراهم می‌کنید کارش را انجام دهد. در درس‌های آینده بیشتر درباره‌ی آرگومان‌ها یاد خواهید گرفت.

در اینجا مثالی از استفاده از متد indexOf() برای پیدا کردن موقعیت رشته‌ی awesome آمده است:

let sentence = "JavaScript is awesome!";
let position = sentence.indexOf("awesome!");
console.log(position); // 14
14

در این مثال، کلمه‌ی awesome از ایندکس 14 در رشته‌ی JavaScript is awesome! شروع می‌شود، بنابراین متد indexOf() مقدار 14 را برمی‌گرداند.

حالا بیایید ببینیم وقتی زیررشته پیدا نشود چه اتفاقی می‌افتد:

let sentence = "JavaScript is awesome!";
let position = sentence.indexOf("fantastic");
console.log(position); // -1
-1

از آنجا که کلمه‌ی fantastic در رشته وجود ندارد، این متد مقدار -1 را برمی‌گرداند.

همچنین می‌توانید با دادن آرگومان دوم به indexOf() مشخص کنید جستجو از کجای رشته شروع شود. این هم یک مثال:

let sentence = "JavaScript is awesome, and JavaScript is powerful!";
let position = sentence.indexOf("JavaScript", 10);
console.log(position); // 27
27

در این حالت، جستجوی JavaScript بعد از کاراکتر دهم شروع می‌شود، و بنابراین دومین رخداد JavaScript در ایندکس 27 پیدا می‌شود.

نکته مهم این است که متد indexOf() به حروف بزرگ و کوچک حساس است (case sensitive).

در این مثال، کد زیر مقدار -1 برمی‌گرداند چون حرف بزرگ F در رشته‌ی freeCodeCamp وجود ندارد.

console.log("freeCodeCamp".indexOf("F")) // -1
-1

استفاده از indexOf() می‌تواند بسیار مفید باشد وقتی لازم دارید بررسی کنید آیا یک زیررشته داخل یک رشته وجود دارد یا نه، و همچنین موقعیت آن را برای عملیات بعدی مشخص کنید.


سوالات

اگر زیررشته در رشته پیدا نشود، متد indexOf چه مقداری برمی‌گرداند؟

  • 0
  • طول رشته
  • -1
  • موقعیت اولین کاراکتر

چگونه می‌توانید با indexOf یک زیررشته را طوری جستجو کنید که از یک موقعیت مشخص درون رشته شروع شود؟

  • با استفاده از آرگومان اول برای مشخص کردن موقعیت شروع
  • با استفاده از آرگومان دوم برای مشخص کردن موقعیت شروع
  • با استفاده از یک متد اضافی
  • با تغییر دادن رشته قبل از جستجو

indexOf() در این مثال چه چیزی برمی‌گرداند؟

const str = "I am learning JavaScript.";
str.indexOf("Javascript");
  • 14
  • 2
  • -1
  • 13