السلاسل Strings

ما هي السلاسل في لغة JavaScript

السلسلة النصية عبارة عن سلسلة من الأحرف والأرقام والأحرف الخاصة والقيم الحسابية أو مجموعة من الكل. يمكننا إنشاء السلاسل من خلال تضمين السلسلة الحرفية (أي أحرف السلسلة) إما ضمن علامات اقتباس مفردة (') أو علامات اقتباس مزدوجة (") ، كما هو موضح في المثال أدناه:

مثال
تشغيل
  1. var myString = 'Hello World!'; سلسلة بإستخدام علامات الاقتباس المفردة //
  2. var myString = "Hello World!"; سلسلة بإستخدام علامات الاقتباس الزوجية //

يمكننا استخدام علامات الاقتباس داخل السلسلة ، طالما أنها لا تتطابق مع علامات الاقتباس المحيطة بالسلسلة:

مثال
تشغيل
  1. var str1 = "it's okay";
  2. var str2 = 'He said "Goodbye"';
  3. var str3 = "She replied 'Calm down, please'";
  4. var str4 = 'Hi, there!"; //Syntax error

ومع ذلك ، لا يزال بإمكاننا استخدام علامات الاقتباس المفردة داخل سلاسل ذات علامات اقتباس مفردة أو علامات اقتباس مزدوجة داخل سلاسل ذات علامات اقتباس مزدوجة عن طريق تخطي علامات الاقتباس باستخدام حرف الشرطة المائلة للخلف backslash character (\) ، على النحو التالي:

مثال
تشغيل
  1. var str1 = 'it\'s okay';
  2. var str2 = "He said \"Goodbye\"";
  3. var str3 = 'She replied \'Calm down, please\'';

تسمى الشرطة المائلة للخلف (\) escape character ، بينما تسمى التسلسلات \' و \" التي استخدمناها في المثال أعلاه escape sequences.


Escape Sequences

تعد متواليات الهروب Escape sequences مفيدة أيضًا في المواقف التي نريد فيها استخدام أحرف لا يمكن كتابتها باستخدام لوحة المفاتيح. فيما يلي بعض متواليات الهروب Escape sequences الأكثر استخدامًا.

  • \n يتم استبداله برمز السطر الجديد newline.
  • \t يتم استبداله بالرمز tab.
  • \r يتم استبداله برمز carriage-return الذي يعمل على تحريك المؤشر إلى بداية السطر دون التقدم إلى السطر التالي.
  • \b يتم استبداله برمز المسافة للخلف backspace
  • \\ يتم استبدالهما بشرطة مائلة واحدة للخلف (\)

فيما يلي مثال لتوضيح كيفية عمل متواليات الهروب escape sequences بشكل عملي:

مثال
تشغيل
  1. var str1 = "The quick brown fox \n jumps over the lazy dog.";
  2. document.write("<pre>" + str1 + "<pre>");
  3. var str2 = "C:\Users\Downloads";
  4. document.write(str2); // C:UsersDownloads
  5. var str3 = "C:\\Users\\Downloads";
  6. document.write(str3); // C:\Users\Downloads

إجراء العمليات على السلاسل النصية

توفر لغة البرمجة JavaScript العديد من الخصائص والطرق لإجراء عمليات على قيم السلسلة. من الناحية الفنية ، يمكن أن يكون للكائنات objects فقط خصائص properties ودوال methods. ولكن في JavaScript ، يمكن لأنواع البيانات الأولية أن تتصرف مثل الكائنات عندما تشير إليها باستخدام تدوين الوصول إلى الخاصية property access notation (أي تدوين النقطة dot notation).
تتيح لنا لغة JavaScript ذلك عن طريق إنشاء كائن مؤقت لأنواع البيانات الأولية. تتم هذه العملية تلقائيًا بواسطة مترجم JavaScript في الخلفية.


الحصول على طول سلسلة

تُرجع الخاصية length طول السلسلة ، وهو عدد الأحرف الموجودة في السلسلة. يتضمن ذلك أيضًا عدد الأحرف الخاصة مثل \t أو \n.

مثال
تشغيل
  1. var str1 = "This is a paragraph of text."
  2. document.write(str1.length); // 28
  3. var str2 = "This is a \n paragraph of text."
  4. document.write(str2.length); // 30
ملاحظة:

نظرًا لأن length خاصية وليست دالة ، فلا تستخدم الأقواس بعدها مثل str.length(). بدلاً من ذلك ، اكتب str.length فقط ، وإلا سينتج خطأ.


إيجاد سلسلة داخل سلسلة أخرى

يمكننا استخدام الدالة indexOf() للبحث عن سلسلة فرعية أو سلسلة ضمن سلسلة أخرى. ترجع هذه الدالة الفهرس أو موضع التواجد الأول لسلسلة محددة داخل سلسلة اخرى.

مثال
تشغيل
  1. var str = "If the facts don't fit the theory, change the facts."
  2. var pos = str.indexOf("facts");
  3. alert(pos); // 7

وبالمثل ، يمكننا استخدام الدالة lastIndexOf() للحصول على فهرس أو موضع التكرار الأخير لسلسلة محددة داخل سلسلة اخرى ، كما في المثال التالي:

مثال
تشغيل
  1. var str = "If the facts don't fit the theory, change the facts."
  2. var pos = str.lastIndexOf("facts");
  3. alert(pos); // 46

تؤدي كل من الدوال indexOf() و lastIndexOf() إلى إرجاع القيمة -1 إذا لم يتم العثور على السلسلة الفرعية. تقبل كلا الدالتين أيضًا عامل parameter عدد صحيح اختياري تحدد الموضع داخل السلسلة لبدء البحث كما في المثال التالي:

مثال
تشغيل
  1. var str = "If the facts don't fit the theory, change the facts."
  2. البحث للأمام //
  3. var pos1 = str.indexOf("facts", 20);
  4. alert(pos1); // 46
  5. البحث للخلف //
  6. var pos2 = str.lastIndexOf("facts", 20);
  7. alert(pos2); // 7
ملاحظة:

الأحرف في السلسلة مفهرسة من اليسار إلى اليمين في اللغة الانجليزية ومن اليمين إلى اليسار في اللغة العربية. فهرس الحرف الأول هو 0 ، وفهرس الحرف الأخير من سلسلة تسمى myStr هو myStr.length - 1.


البحث عن نمط داخل سلسلة

يمكننا استخدام الدالة search() للبحث عن جزء معين من النص أو النمط داخل سلسلة.
كما في الدالة indexOf() ، تقوم الدالة search() أيضًا بإرجاع فهرس المطابقة الأولى ، وإرجاع -1 إذا لم يتم العثور على مطابقات ، ولكن بخلاف الدالة indexOf() ، يمكن أن تأخذ هذه الدالة أيضًا تعبيرًا نمطياً regular expression كوسيطة argument لتوفير قدرات بحث متقدمة.

مثال
تشغيل
  1. var str = "Color red looks brighter than color blue."
  2. بحث حساس لحالة الأحرف //
  3. var pos1 = str.search("color");
  4. alert(pos1); // 30
  5. بحث غير حساس لحالة الأحرف باستخدام regex //
  6. var pos2 = str.search(/color/i);
  7. alert(pos2); // 0

سوف نتعلم المزيد عن التعابير النمطية regular expressions في درس لاحق .


استخراج سلسلة فرعية من سلسلة

يمكننا استخدام الدالة slice() لاستخراج جزء أو سلسلة فرعية من سلسلة اخرى.
تأخذ هذه الدالة عاملين: فهرس البداية start index (الفهرس الذي يبدأ عنده الاستخراج) ، وفهرس النهاية end index الاختياري (الفهرس الذي ينتهي الاستخراج قبله) ، مثل str.slice(startIndex, endIndex).
في المثال التالي سنقوم بقطع جزء من سلسلة من الموضع 4 إلى الموضع 15:

مثال
تشغيل
  1. var str = "The quick brown fox jumps over the lazy dog."
  2. var subStr =str.slice(4,15);
  3. document.write(subStr); // quick brown

يمكننا أيضًا إستخدام القيم السالبة. يتم التعامل مع القيمة السالبة على أنها strLength + startIndex ، حيث يكون strLength هو طول السلسلة (مثل str.length ) و startIndex هو فهرس البداية ، على سبيل المثال ، إذا كان startIndex هو -5 ، فسيتم معاملته على أنه strLength - 5.
إذا كان startIndex أكبر من أو يساوي طول السلسلة ، فإن الدالة slice() ترجع سلسلة فارغة. أيضًا ، إذا لم يتم تحديد أو حذف فهرس النهاية endIndex الاختيارية ، ستستمر الدالة slice() بالعمل إلى نهاية السلسلة.

مثال
تشغيل
  1. var str = "The quick brown fox jumps over the lazy dog."
  2. document.write(str.slice(-28,-19)); // fox jumps
  3. document.write(str.slice(31)); // the lazy dog

يمكننا أيضًا استخدام الدالة substring() لاستخراج قسم من السلسلة المحددة بناءً على فهارس البداية والنهاية ، مثل str.substring(startIndex, endIndex) . الدلة substring() تشبه إلى حد كبير الدالة slice() ، باستثناء بعض الاختلافات:

  • إذا كانت أي من الوسيطتين أقل من 0 أو كانت NaN ، فسيتم التعامل معها على أنها 0.
  • إذا كانت أي من الوسيطتين أكبر من str.length ، فسيتم التعامل معها كما لو كانت str.length.
  • إذا كانت قيمة startIndex أكبر من endIndex ، فستقوم substring() بتبديل هاتين الوسيطتين ؛ على سبيل المثال ، str.substring(5, 0) == str.substring(0, 5).

سيوضح لنا المثال التالي كيفية عمل هذه الدالة بشكل عملي :

مثال
تشغيل
  1. var str = "The quick brown fox jumps over the lazy dog."
  2. document.write(str.substring(4,15)); // quick brown
  3. document.write(str.substring(9,0)); // The quick
  4. document.write(str.substring(-28,-19)); // لا شيء
  5. document.write(str.substring(31)); // the lazy dog

توفر لغة JavaScript أيضًا الدالة substr() التي تشبه slice() مع اختلاف بسيط ، حيث يحدد المعامل الثاني عدد الأحرف المراد استخراجها بدلاً من فهرس النهاية ، مثل str.substr(startIndex, length). إذا كانت قيمة المعامل length هي 0 أو رقمًا سالبًا ، سيتم إرجاع سلسلة فارغة empty string . يوضح المثال التالي كيفة عملها:

مثال
تشغيل
  1. var str = "The quick brown fox jumps over the lazy dog."
  2. document.write(str.substr(4,15)); // quick brown fox
  3. document.write(str.substr(-28,-19)); // لا شيء
  4. document.write(str.substr(-28,9)); // fox jumps
  5. document.write(str.substr(31)); // the lazy dog

استبدال محتويات سلسلة

يمكننا استخدام الدالة replace() لاستبدال جزء من سلسلة بسلسلة أخرى. تأخذ هذه الدالة عاملين ، العامل الاول تعبيرًا منطقياً أو سلسلة فرعية للمطابقة ، والعامل الثاني سلسلة بديلة ، مثل str.replace(regexp|substr, newSubstr) .
تعيد الدالة replace() سلسلة جديدة ، ولا تؤثر على السلسلة الأصلية التي ستبقى دون تغيير. سيوضح لنا المثال التالي كيفية عملها:

مثال
تشغيل
  1. var str = "Color red looks brighter than color blue."
  2. var result = str.replace("color","paint");
  3. alert(result); // Color red looks brighter than paint blue.

بشكل افتراضي ، تستبدل الدالة replace() المطابقة الأولى فقط ، وهي حساسة لحالة الأحرف. لاستبدال سلسلة فرعية داخل سلسلة اخرى بطريقة غير حساسة لحالة الأحرف ، يمكننا استخدام تعبير منطقي (regexp) بإستخدام المُعدِّل modifier i ، كما هو موضح في المثال أدناه:

مثال
تشغيل
  1. var str = "Color red looks brighter than color blue."
  2. var result = str.replace(/color/i,"paint");
  3. alert(result); // paint red looks brighter than color blue.

وبالمثل ، لاستبدال جميع تكرارات سلسلة فرعية داخل سلسلة بطريقة غير حساسة لحالة الأحرف ، يمكننا استخدام المُعدِّل g مع المُعدِّل i ، على النحو التالي:

مثال
تشغيل
  1. var str = "Color red looks brighter than color blue."
  2. var result = str.replace(/color/ig,"paint");
  3. alert(result); // paint red looks brighter than paint blue.

تحويل سلسلة إلى أحرف كبيرة أو صغيرة

يمكننا استخدام الدالة toUpperCase() لتحويل سلسلة إلى أحرف كبيرة ، كما في المثال التالي:

مثال
تشغيل
  1. var str = "Hello World!"
  2. var result = str.toUpperCase();
  3. alert(result); // HELLO WORLD!

وبالمثل ، يمكننا استخدام toLowerCase() لتحويل سلسلة إلى أحرف صغيرة ، كما في المثال التالي:

مثال
تشغيل
  1. var str = "Hello World!"
  2. var result = str.toLowerCase();
  3. alert(result); // hello world!

تجميع سلسلتين أو أكثر

يمكننا تجميع سلسلتين أو أكثر باستخدام المعاملين + و += .

مثال
تشغيل
  1. var hello = "Hello"
  2. var world = "World"
  3. var greet = hello + " " + world;
  4. document.write(greet); // Hello World
  5. var wish = "Happy";
  6. wish += " New Year";
  7. document.write(wish); // Happy New Year

توفر لغة JavaScript أيضًا الدالة concat() لدمج السلاسل ، لكن لا يوصى بها.


الوصول إلى الأحرف/الرموز الفردية من السلسلة

يمكننا استخدام الدالة charAt() للوصول إلى حرف/رمز فردي من سلسلة ، مثل str.charAt(index). يجب أن يكون الفهرس index المحدد عددًا صحيحًا بين 0 و str.length - 1 . إذا لم يتم توفير الفهرس ، فسيتم إرجاع الحرف الأول في السلسلة ، نظرًا لأن القيمة الافتراضية هي 0.

مثال
تشغيل
  1. var str = "Hello World!"
  2. document.write(str.charAt()); // H
  3. document.write(str.charAt(6)); // W
  4. document.write(str.charAt(30)); // لا شيء
  5. document.write(str.charAt(str.length - 1)); // لا شيء

هناك طريقة أفضل للقيام بذلك. منذ الإصدار الخامس ECMAScript 5 ، يمكننا التعامل مع السلاسل كمصفوفات للقراءة فقط ، ويمكننا الوصول إلى الأحرف الفردية من سلسلة باستخدام الأقواس المربعة square brackets ([ ]) بدلاً من الدالة charAt() ، كما هو موضح في المثال التالي:

مثال
تشغيل
  1. var str = "Hello World!";
  2. document.write(str[0]); // H
  3. document.write(str[6]); // W
  4. document.write(str[str.length - 1]); // !
  5. document.write(str[30]); // undefined
ملاحظة:

الاختلاف الوحيد بين الوصول إلى حرف السلسلة باستخدام الدالة charAt() والأقواس المربعة ([]) هو أنه إذا لم يتم العثور على حرف ، فإن [] سترجع القيمة undefined ، بينما تقوم الدالة charAt() بإرجاع سلسلة فارغة.


تقسيم سلسلة إلى مصفوفة

يمكن استخدام الدالة split() لتقسيم سلسلة نصية إلى مصفوفة من السلاسل النصية ، باستخدام بناء الجملة str.split(separator, limit). يحدد المعامل seperator السلسلة التي يجب أن يحدث عندها كل تقسيم ، بينما يحدد المعامل limit الحد الأقصى لطول المصفوفة.
إذا تم حذف المعامل seperator أو لم يتم العثور عليه في السلسلة المحددة ، يتم تعيين السلسلة بأكملها إلى العنصر الأول من المصفوفة. المثال التالي يوضح آلية عمل هذه الدالة :

مثال
تشغيل
  1. var fruitsStr = "Apple, Banana, Mango, Orange, Papaya";
  2. var fruitsArr = fruitsStr.split(", ") ;
  3. document.write(fruitsArr[0]); // Apple
  4. document.write(fruitsArr[2]); // Mango
  5. document.write(fruitsArr[fruitsArr.length - 1]); // Papaya
  6. تكرار جميع عناصر مجموعة الفواكه من خلال جملة التكرار for //
  7. for(var i in fruitsArr) {
  8. document. write( "<p>" + fruitsArr[i] + "</p>" );
  9. }

لتقسيم سلسلة إلى مصفوفة من الأحرف ، قم بإستخدام سلسلة فارغة ( "" ) كقيمة للمعامل separator.

مثال
تشغيل
  1. var str = "INTERSTELLAR";
  2. var strArr = str.split("");
  3. document.write(strArr[0]); // I
  4. document.write(strArr[1]); // N
  5. document.write(strArr[strArr.length - 1]); // R
  6. تكرار جميع عناصر مجموعة الأحرف وطباعتها بإستخدام جملة التكرار for //
  7. for(var i in strArr) {
  8. document.write( "<p>" + strArr[i] + "</p>" );
  9. }

سوف نتعلم المزيد عن جمل التكرار بالتفصيل في دروس لاحقة .