متدی برای داده‌های رشته‌ای

از ویکی‌کد
پرش به ناوبری پرش به جستجو
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");


مشاهدهٔ نتیجه


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

عدد ۰ نشان دهنده موقعیت اولین کاراکتر در یک رشتهٔ متنی است، عدد ۱ موقعیت دومین کاراکتر، عدد ۲ موقعیت سومین کاراکتر … را نشان می‌دهد.

متد 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());


مشاهدهٔ نتیجه


متد trim() در اینترنت اکسپلور نسخه ۸ و پایینتر پشتیبانی نمی‌شود.

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

1 var str = "       Hello World!        ";
2 alert(str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''));

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

مثال

1 if (!String.prototype.trim) {
2   String.prototype.trim = function () {
3     return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
4   };
5 }
6 var str = "       Hello World!        ";
7 alert(str.trim());


مشاهدهٔ نتیجه


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

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

  • 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("|");          // Split on pipe


مشاهدهٔ نتیجه


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

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

مثال

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


مشاهدهٔ نتیجه


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

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

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

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

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



منابع آموزشی