در زبان برنامه نویسی جاوا اسکریپت متد هایی برای کار با رشته ها وجود دارد که به ما کمک می کنند تا به بهترین شکل از رشته ها استفاده کنیم.
متدهای رشته (Strings Methods) و مشخصه ها
مقادیر اولیه مانند، "John doe" نمی توانند مشخصه یا متد داشته باشند (چون اشیا محسوب نمی شوند). اما در جاوا اسکریپت متدها و مشخصه ها هم برای مقادیر اولیه در دسترس می باشند، چرا که جاوا اسکریپت هنگام اجرای متدها و مشخصه ها مقادیر اولیه را بعنوان اشیا در نظر می گیرد.
طول رشته
مشخصه length طول یک رشته را به ما برمی گرداند. خروجی این مشخصه یک عدد است که به ما طول رشته مورد نظر را نشان می دهد.
جستجوی یک رشته در یک رشته ی دیگر
متد ()indexOf ، ایندکس یا موقعیت اولین نقطه ظاهر شدن یک متن خاص را در یک رشته به ما بر می گرداند و در صورتی که موفق به پیدا شدن رشته مورد نظر نگردد، مقدار (1-) را برمی گرداند.
خروجی مثال بالا به شکل زیر است. همانطور که می بینید اولین نقطه رویت کلمه locate در موقعیتی با ایندکس 7 است.
متد ()lastIndexOf
متد ()lastIndexOf : این متد ایندکس آخرین نقطه ظاهر شدن یک متن بخصوص در یک رشته را به ما برمی گردان و به عبارتی از انتهای رشته شروع به جستجوی رشته مورد نظر می کند. درصورتی که موفق به پیدا شدن رشته مورد نظر نگردد، مقدار (-1) را برمی گرداند.
خروجی مثال بالا به شکل زیر است.
همانطور که گفتیم هم ()indexOf و هم ()lastIndexOf در صورتی که موفق به پیدا کردن کردن متن نباشند مقدار (-1) را برمی گردانند.
در مثال زیر چون متد ()indexof موفق به پیدا کردن متن “John” نشد، مقدار (-1) در خروجی نمایش داده شد.
هم متد ()indexOf و هم متد ()lastIndexOf یک پارامتر ثانویه را به عنوان موقعیت شروع جستجو در نظر می گیرند:
مثال زیر نحوه انجام این کار را نشان می دهد:
متد ()lastIndexOf از آخر به اول جستجو می کند، به عبارتی: اگر پارامتر دوم 15 باشد، جستجو از انتهای رشته از موقعیت 15 شروع شده و تا ابتدای رشته ادامه پیدا می کند.
خروجی مثال بالا به شکل زیر است:
متد ()search به جستجوی یک رشته در یک مقدار مشخص می پردازد و موقعیت یافت شده را برمی گرداند:
در مثال بالا با استفاده از متد search موقعیت قرار گرفتن عبارت “locate” در متن موردنظر جستجو و مقدار 7 به عنوان موقعیت عبارت “locate” در متن در خروجی نمایش داده شده است.
یک نکته ی مهم :
آیا دو متد ()indexOf و ()search باهم برابر هستند؟ آیا هر دوی این متدها ورودی های مشابه را دریافت می کنند و مقادیر مشابه را بر می گردانند؟
در حقیقت این دو متد برابر نیستند و تفاوت هایی با یکدیگر دارند:
متد ()search نمی تواند یک پارامتر ورودی برای مشخص کردن نقطه ی شروع جستجو دریافت کند.
متد ()indexOf نمی تواند جستجوی عبارات با قائده (regular expressions) را بر عهده بگیرد.
استخراج بخش هایی از رشته
سه متد برای استخراج یک بخش از رشته وجود دارد:
- slice(start, end)
- substring(start, end)
- substr(start, length)
متد ()slice (برش قسمتی از یک متن)
متد ()slice یک بخش از رشته را استخراج کرده و آن بخش استخراج شده را در یک رشته ی جدید بر می گرداند.
این متد از دو پارامتر بهره می برد: موقعیت شروع و موقعیت پایان.
مثال زیر نمونه ای از برش یک رشته از موقعیت 7 تا 12 رشته str را نشان می دهد.
اگر یک پارامتر منفی باشد، موقعیت از آخر رشته حساب می شود:
برش نمونه مثال زیر یک رشته از موقعیت 12- تا موقعیت 6- را برمی گرداند:
اگر شما پارامتر دوم متد ()slice را حذف کنید، این متد بقیه ی رشته را برش می زند و به عنوان خروجی برگشت می دهد:
;var res = str.slice(7)
و اگر موقعیت عددی منفی باشد، از آخر متن به اول متن بقیه رشته را برمی گرداند:
;var res = str.slice(-12)
متد ()substring
متد ()substring مانند متد ()slice می باشد. تنها فرق این دو این است که متد ()substring ایندکس های منفی را نمی پذیرد:
اگر شما پارمتر دوم را حذف کنید، ()substring نیز مانند متد ()slice بقیه ی رشته را برش می زند:
متد ()substr
()substr هم مانند ()slice می باشد. با این تفاوت که پارامتر دوم متد ()substr طول قسمت استخراج شده را مشخص می کند:
اگر شما پارامتر دوم را حذف کنید، ()substr بقیه متن را برش می زند:
اگر پارامتر ورودی متد ()substr منفی باشد، موقعیت از آخر رشته حساب می شود:
جایگزین کردن محتوای رشته
متد ()replace یک مقدار مشخص شده را با یک مقدار دیگر در متن جایگزین می کند:
همانطور که در خروجی مثال بالا می بینید، عبارت W3schools با عبارت Microsoft در متن جایگزین شده است.
بصورت پیش فرض، متد ()replace فقط اولی را جایگزین می کند:
بصورت پیش فرض متد ()replace به کوچک و بزرگی حروف حساس می باشد و مثلا نوشتن MICROSOFT جواب نخواهد داد.
مثال زیر خروجی مثال بالا را نشان می دهد. همانطور که می بینید عمل جایگزینی صورت نگرفته چرا که عبارت MICROSOFT با عبارت Microsoft از دید متد ()replace متفاوت است.
برای غیر فعال کردن این ویژگی (case sensitive)، از یک عبارت با قائده همراه با برچسب /i استفاده کنید.
خروجی مثال بالا به شکل زیر است.
برای جایگزین کردن تمام عناوین مشابه، از یک عبارت با قائده به همراه برچسب /g استفاده کنید:
خروجی مثال بالا به شکل زیر است.
تبدیل کردن یک رشته به حروف کوچک و بزرگ و بالعکس
در زبان جاوا اسکریپت با استفاده از متد ()toUpperCase شما می توانید تمامی کارکترهای رشته موردنظر را به حروف بزرگ تبدیل کنید:
همانطور که در خروجی زیر می بینید، عبارت Hello World! پس از اعمال متد ()toUpperCase به شکل HELLO WORLD! درآمد.
همچنین در زبان جاوا اسکریپت شما با استفاده از متد ()toLowerCase می توانید تمامی کاراکترهای رشته موردنظر خودتان را به حروف کوچک تبدیل کنید:
خروجی مثال بالا به شکل زیر است:
متد ()concat
با استفاده از متد ()concat در زبان جاوا اسکریپت شما می توانید تعداد دو یا بیشتر از یک رشته را بهم متصل کنید:
همانطور که در خروجی زیر می بینید، مقادیر متغیرهای text1 و text2 با استفاده از متد ()contact به هم متصل و به عبارتی الحاق شده اند.
متد ()concat همچنین می تواند به جای عملگر جمع استفاده شود. دو خط پایین کار مشابهی را انجام می دهند:
()String.trim
با استفاده از متد ()trim در جاوا اسکریپت شما می توانید فضای خالی را از دو طرف رشته مورد نظر حذف می کند:
تصویر زیر خروجی مثال بالا را نشان می دهد.
اگر شما نیاز دارید که اینترنت اکسپلورر 8 را نیز ساپورت کنید، می توانید از متد ()replace با یک عبارت با قائده (regular expression) استفاده کنید:
خروجی مثال بالا به شکل زیر است:
شما همچنین می توانید از راه حل جایگزین کردن بالا برای اضافه کردن یک تابع برشی به نام String.prototype در جاوا اسکریپت استفاده کنید:
خروجی مثال بالا به شکل زیر است:
استخراج کاراکترهای رشته
سه متد برای استخراج کاراکترهای موردنظر از درون رشته ها وجود دارد:
- charAt(position)
- charCodeAt(position)
- Property access [ ]
متد ()charAt
این متد یک ورودی عددی به نام ایندکس می پذیرد که موقعیت کاراکتری در رشته است که باید برگردانده شود.
در مثال زیر همانطور که می بینید کاراکتر H که اولین کاراکتر رشته str است به عنوان خروجی متد ()charAt در خروجی نمایش داده شده است.
متد ()charCodeAt
این متد یونیکد کاراکتر موردنظر را که با استفاده از ایندکس آن مشخص شده در یک رشته بر می گرداند:
این متد یک کد UTF-16 را برمی گرداند، که یک عدد صحیح بین 0 تا 65535 است.
در خروجی مثال بالا مقدار یونیکد کارکتر H که ایندکس موقعیت آن برابر با 0 است برگردانده شده است.
دسترسی به مشخصه
ECMAScript 5 (2009) اجازه ی دسترسی به کاراکترهای یک رشته را با استفاده از [ ] می دهد:
در مثال بالا دستور str[0]=”A”; باعث ایجاد خطا نمی شود، اما خب کار هم نمی کند. و دستور str[0] مقدار H را در خروجی برمی گرداند.
تبدیل کردن یک رشته به آرایه
در زبان جاوا اسکریپت شما با استفاده از متد ()split می توانید یک رشته را به یک آرایه تبدیل کنید و کاراکترهای درون رشته را درون یک آرایه قرار دهید. نکته ای که باید دقت کنید این هست که متد ()split یک ورودی می گیرد که این ورودی نقاط شکست رشته را مشخص می کند و درحقیقت جداکننده نامیده می شود.
در مثال بالا رشته str با استفاده از کاراکتر , شکسته شده و هر کاراکتر درون یک خانه از آرایه قرار می گیرد.
اگر در متد ()split جدا کننده حذف شده باشد، آرایه ای که بر می گردد شامل یک رشته ی کامل در ایندکس [0] خواهد بود.
اگر جداکننده "" باشد، آرایه ای که بر می گردد، آرایه ای با کاراکترهای تکی خواهد بود.
خروجی مثال بالا به شکل زیر است: