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

از ویکی کد
پرش به ناوبری پرش به جستجو
Main Page Tutorial
JavaScript-menu.png
موارد آموزشی
فرم‌ها در جاوا اسکریپت
اشیاء در جاوا اسکریپت
تابع در جاوا اسکریپت
HTML DOM در جاوا اسکریپت
Browser BOM در جاوا اسکریپت
AJAX در جاوا اسکریپت
JSON در جاوا اسکریپت
جی‌کوئری در برابر جاوا اسکریپت
مثال‌های جاوا اسکریپت
مرجع جاوا اسکریپت

متدهای کمکی برای نوع داده متنی یا رشته‌ای string به شما کمک می‌کند تا با این نوع از داده کار کنید. [۱]

محتویات

متدهای کمکی رشته ای (به انگلیسی: String) و ویژگی های کمکی

مقادیر اصلی (به انگلیسی: primitive) همانند عبارت "John Doe"، نمی‌توانند ویژگی یا متد داشته باشند (زیرا که آنها اشیاء (به انگلیسی: objects) نیستند).

اما با زبان جاوا اسکریپت، متدها و ویژگی‌ها هم برای مقادیر اصلی (به انگلیسی: primitive) نیز در دسترس هستند، زیرا جاوا اسکریپت زمانی که متدها و ویژگی‌ها را اجرا می‌کند با آن‌ها همانند یک شیء (به انگلیسی: object) برخورد می‌کند.

طول یک رشتهٔ متنی (به انگلیسی: String)

ویژگیlengthطول یک رشتهٔ متنی (به انگلیسی: string) را برمی‌گرداند:

مثال

1 var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
2 var sln = txt.length;


پیدا کردن یک رشتهٔ متنی درون یک رشته

متد indexOf() اندیس (موقعیت) نقطهٔ شروع یک متن به خصوص را در یک رشتهٔ متنی (به انگلیسی: string) برمی‌گرداند:

مثال

1 var str = "Please locate where 'locate' occurs!";
2 var pos = str.indexOf("locate");

جاوا اسکریپت شمارش موقعیت یا اندیس‌های یک رشتهٔ متنی را از صفر شروع می‌کند.

عدد 0 نشان دهنده موقعیت اولین کاراکتر در یک رشتهٔ متنی است، عدد 1 موقعیت دومین کاراکتر، عدد 2 موقعیت سومین کاراکتر … را نشان می‌دهد.

متدlastIndexOf()موقعیت آخرین کاراکتر یک رشتهٔ متنی را درون یک متن بازمی‌گرداند:

مثال

1 var str = "Please locate where 'locate' occurs!";
2 var pos = str.lastIndexOf("locate");

هر دو متدindexOf()، وlastIndexOf()در صورتی که متن مورد نظر در درون رشتهٔ مورد نظر وجود نداشته باشد مقدار-1را به عنوان خروجی برمی‌گردانند.

مثال

1 var str = "Please locate where 'locate' occurs!";
2 var pos = str.lastIndexOf("John");

هر دو متد پارامتر دومی دارند که اندیس موقعیت شروع برای جستجو در رشته را دریافت می‌کند:

مثال

1 var str = "Please locate where 'locate' occurs!";
2 var pos = str.indexOf("locate", 15);

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

مثال

1 var str = "Please locate where 'locate' occurs!";
2 var pos = str.lastIndexOf("locate", 15);


جستجوی یک رشته در یک رشتهٔ دیگر

متدsearch()یک رشتهٔ متنی را برای پیدا کردن یک مقدار به خصوص جستجو می‌کند و موقعیت یا اندیس نتیجه را برمی‌گرداند:

مثال

1 var str = "Please locate where 'locate' occurs!";
2 var pos = str.search("locate");


آیا این نکته را متوجه شدید؟

دو متد، indexOf()وsearch()، باهم برابر هستند؟

آنها آرگومان‌ها (پارامترهای) یکسانی دارند، و مقدار یکسانی را به عنوان خروجی بازمی‌گردانند؟

اما این دو متد باهم برابر نیستند. در زیر تفاوت‌های این دو متد را می‌بینید:

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

شما در مورد عبارات با قاعده در فصل‌های آینده مطالب بیشتری را خواهید آموخت.

جداسازی بخش های داده های متنی یا رشته ای (به انگلیسی: String)

سه متد برای جداسازی یک بخش از یک رشتهٔ متنی (به انگلیسی: string) وجود دارد:

  • slice(start, end)
  • substring(start, end)
  • substr(start, length)

متد slice()

متدslice()یک بخش از یک رشتهٔ متنی (به انگلیسی: string) را جدا می‌کند و بخش جدا شده را به عنوان یک رشتهٔ متنی جدید برمی‌گرداند.

این متد دو پارامتر دریافت می‌کند: نقطه شروع، و نقطه پایان (نقطه پایان را شامل نمی‌شود).

این مثال، یک بخشی از رشتهٔ متنی را از اندیس شمارهٔ هفت تا اندیس شماره دوازده (۱–۱۳) را جدا می‌کند:

مثال

1 var str = "Apple, Banana, Kiwi";
2 var res = str.slice(7, 13);


نتیجه متغیر res برابر خواهد بود با:

Banana
به یاد داشته باشید: جاوا اسکریپت شمارش موقعیت یا اندیس را از صفر شروع می‌کند. اندیس اولین کاراکتر صفر است.

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

این مثال بخشی از رشتهٔ متنی را با اندیس ۱۲- تا ۶- را جدا می‌کند:

مثال

1 var str = "Apple, Banana, Kiwi";
2 var res = str.slice(-12, -6);

نتیجه متغیر res برابر خواهد بود با:

Banana

اگر شما پارامتر دوم را ننویسید، متد رشتهٔ متنی را از میزان پارامتر اول به بعد را جدا خواهد کرد:

مثال

var res = str.slice(7);

یا، شمارش از اندیس آخر رشته صورت بگیرد:

مثال

var res = str.slice(-12);
اندیس‌های منفی در اینترنت اکسپلورر ورژن ۸ و ورژن‌های قبلی کار نمی‌کنند.

متد substring()

متدsubstring()بسیار شبیه به متدslice()است.

تفاوت این دو متد در این است که متدsubstring()نمی‌تواند اندیس‌های منفی را به عنوان پارامتر یا آرگومان قبول کند.

مثال

1 var str = "Apple, Banana, Kiwi";
2 var res = str.substring(7, 13);

نتیجه متغیر res برابر خواهد بود با:

Banana

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

متد substr()

متدsubstr()بسیار شبیه بهSlice()است.

تفاوت بین این دو متد این است که پارامتر دوم طول بخش جدا شده را مشخص می‌کند.

مثال

1 var str = "Apple, Banana, Kiwi";
2 var res = str.substr(7, 6);

نتیجه متغیر res برابر خواهد بود با:

Banana

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

مثال

1 var str = "Apple, Banana, Kiwi";
2 var res = str.substr(7);

نتیجه متغیر res برابر خواهد بود با:

Banana, Kiwi

اگر پارامتر اول منفی باشد، موقعیت یا اندیس از انتهای رشتهٔ متنی شمرده می‌شود.

مثال

1 var str = "Apple, Banana, Kiwi";
2 var res = str.substr(-4);

نتیجه متغیر res برابر خواهد بود با:

Kiwi

جا به جا کردن محتوای رشته های متنی (به انگلیسی: string)

متدreplace()یک مقدار به خصوص را با یک مقدار دیگر در یک رشتهٔ متنی جابه‌جا می‌کند:

مثال

1 str = "Please visit Microsoft!";
2 var n = str.replace("Microsoft", "Wikicod");
متدreplace()رشتهٔ متنی را که از آن فراخوانی شده‌است را تغییر نمی‌دهد. این تابع یک رشتهٔ متنی جدید را به عنوان خروجی بازمی‌گرداند.

به صورت پیشفرض، متدreplace()تنها اولین نتیجه برابر را جابه‌جا می‌کند:

مثال

1 str = "Please visit Microsoft and Microsoft!";
2 var n = str.replace("Microsoft", "Wikicod");

به صورت پیشفرض، متدreplace()یک متد حساس به حروف کوچک یا بزرگ (به انگلیسی: case sensitive) است. نوشتن کلمه MICROSOFT (با حروف بزرگ) برای رشتهٔ متنی در مثال زیر کار نخواهد کرد:

مثال

1 str = "Please visit Microsoft!";
2 var n = str.replace("MICROSOFT", "Wikicod");

برای این‌که هنگام جابه‌جایی رشته‌ها، حساسیت به حروف کوچک و بزرگ در نظر گرفته نشود، از یک عبارت با قاعده به وسیلهٔ/i(عدم حساسیت به حروف کوچک و بزرگ) می‌بایست استفاده کنید:

مثال

1 str = "Please visit Microsoft!";
2 var n = str.replace(/MICROSOFT/i, "Wikicod");

توجه داشته باشید که عبارت‌های با قاعده بدون کوتیشن ('یا) نوشته می‌شوند.

برای اینکه تمامی نتایج یکسان جابه‌جا شوند، از عبارت با قاعده با/g(که مخفف تمامی نتایج همسان (به انگلیسی: global match)) است استفاده کنید:

مثال

1 str = "Please visit Microsoft and Microsoft!";
2 var n = str.replace(/Microsoft/g, "Wikicod");
شما مطالب بیشتری را در مورد عبارت‌های با قاعده در فصل عبارت‌های باقاعده در جاوا اسکریپت خواهید آموخت.

تبدیل به حروف کوچک و بزرگ

با استفاده از متدتمام حروف یک رشتهٔ متنی به حروف بزرگ تبدیل می‌شوند:

مثال

1 var text1 = "Hello World!";       // String
2 var text2 = text1.toUpperCase();  // text2 is text1 converted to upper

با استفاده از متدtoLowerCase()، تمامی حروف یک رشتهٔ متنی به حروف کوچک تبدیل می‌شوند:

مثال

1 var text1 = "Hello World!";       // String
2 var text2 = text1.toLowerCase();  // text2 is text1 converted to lower


متد concat()

متدconcat()دو یا چند رشتهٔ متنی را به یکدیگر می‌چسباند:

مثال

1 var text1 = "Hello";
2 var text2 = "World";
3 var text3 = text1.concat(" ", text2);

متدconcat()می‌تواند به جای عملگر + استفاده شود. دو خط زیر کد کار یکسانی را انجام می‌دهند:

مثال

1 var text = "Hello" + " " + "World!";
2 var text = "Hello".concat(" ", "World!");
تمامی متدهایی که مربوط به رشته‌های متنی می‌شوند، یک رشتهٔ متنی جدید را به عنوان خروجی برمی‌گردانند. آنها رشتهٔ متنی اصلی را تغییر نمی‌دهند. اگر بخواهیم ساده بگوییم: رشته‌های متنی تغییرناپذیر هستند: رشته‌های متنی نمی‌توانند تغییر کنند، آنها تنها می‌توانند جابه‌جا شوند.

متد trim()

متدtrim()فضاهای خالی دو طرف یک رشتهٔ متنی را پاک می‌کند:

مثال

1 var str = "       Hello World!        ";
2 alert(str.trim());
متد در اینترنت اکسپلور ورژن ۸ و پایینتر پشتیبانی نمی‌شود.

اگر شما نیاز دارید که کد شما حتما در مرورگر اینترنت اکسپلور ورژن هشت پشتیبانی شود، شما می‌توانید از متدreplace()به همراه یک عبارت با قاعده به جای متدtrim()استفاده کنید.

1 var str = "       Hello World!        ";
2 alert(str.replace(/^[\s\uFEFF\xA0]+

شما همچنین می‌توانید از روش جابه‌جایی بالا برای اضافه کردن یک تابع trim بهString.prototypeدر جاوا اسکریپت استفاده کنید:

مثال

1 if (!String.prototype.trim) {
2   String.prototype.trim = function () {
3     return this.replace(/^[\s\uFEFF\xA0]+


جداسازی کاراکترهای یک رشتهٔ متنی

برای جداسازی کاراکترهای یک رشتهٔ متنی سه متد در جاوا اسکریپت وجود دارد:

  • charAt(position)
  • charCodeAt(position)
  • ویژگی access [ ]

متد charAt()

متدcharAt()یک کاراکتر را در یک اندیس (موقعیت به خصوص) در یک رشتهٔ متنی برمی‌گرداند:

مثال

1 var str = "HELLO WORLD";
2 str.charAt(0);            // returns H


متد charCodeAt()

متدcharCodeAt()مقدار یونیکد یک کاراکتر به خصوص در یک موقعیت یا اندیس در یک رشته را برمی‌گرداند.

این متد یک کد بر حسب UTF-16 (عددی صحیح بین ۰ و ۶۵۵۳۵) را برمی‌گرداند.

مثال

1 var str = "HELLO WORLD";
2 
3 str.charCodeAt(0);         // returns 72


ویژگی Access

ECMAScript 5 که در سال ۲۰۰۹ منتشر شد، اجازه استفاده از عملگر دسترسی (به انگلیسی: [ ] access) را برای متن‌ها می‌دهد:

مثال

1 var str = "HELLO WORLD";
2 str[0];                   // returns H

نتیجهٔ استفاده از ویژگی دسترسی (به انگلیسی: access) کمی غیرقابل پیش‌بینی می‌باشد:

  • این ویژگی در مرورگر اینترنت اکسپلور ورژن ۷ یا ورژن‌های قدیمی‌تر کار نمی‌کند.
  • استفاده از این روش باعث می‌شود که رشته‌های متنی به آرایه‌ها شبیه باشند (در حالی که شباهتی بین این دو وجود ندارد)
  • اگر کاراکتری یافت نشود، ویژگی [ ] ویژگی undefined (به فارسی: تعریف نشده) را برمی‌گرداند در حالی که متد charAt() یک رشتهٔ متنی خالی بازمی‌گرداند.
  • این قابلیت فقط خواندنی است. نوشتن دستور str[0] = "A" موجب بروز خطا نمی‌شود (اما کار نمی‌کند!)

مثال

1 var str = "HELLO WORLD";
2 str[0] = "A";             // Gives no error, but does not work
3 str[0];                   // returns H
اگر شما می‌خواهید که با یک رشتهٔ متنی همانند یک آرایه کار کنید، می‌توانید آن را به یک آرایه تبدیل کنید.

تبدیل یک رشتهٔ متنی به یک آرایه

یک رشتهٔ متنی را می‌توان به وسیلهٔ متدsplit()به یک آرایه تبدیل کرد.

مثال

1 var txt = "a,b,c,d,e";   // String
2 txt.split(",");          // Split on commas
3 txt.split(" ");          // Split on spaces
4 txt.split("

اگر جدا کننده نوشته نشود، آرایه بازگشتی کل رشتهٔ متنی را در اندیس [0] نگهداری خواهد کرد.

اگر جدا کننده" "باشد ، آرایه بازگشتی آرایه‌ای از تک کاراکترها خواهد بود:

مثال

1 var txt = "Hello";       // String
2 txt.split("");           // Split in characters


مرجع کامل در مورد رشته های متنی (به انگلیسی: String)

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

این مرجع شامل توضیحات و مثال‌هایی از تمامی ویژگی‌های رشتهٔ متنی و متدهاست.

تمرینات جاوا اسکریپت

Time2wait.svg ساخت نمونه مثال این بخش در دست اقدام است.


منابع آموزشی