دالة split() في JavaScript: كيفية تقسيم النص إلى مصفوفة باحتراف

دقائق القراءة: 6

ما هي السلسلة النصية في JavaScript؟

تمثل السلسلة النصية string تسلسلاً من الأحرف داخل لغة البرمجة. وهي من أكثر أنواع البيانات استخداماً عند التعامل مع المدخلات، والرسائل، والنصوص القادمة من الواجهات أو من قواعد البيانات.

على سبيل المثال، يمكن إنشاء سلسلة نصية تحتوي على العبارة "Yes, You Can DO It!" بعدة طرق في JavaScript.

إنشاء سلسلة نصية باستخدام القيمة النصية المباشرة

const msg = "Yes, You Can DO It!";

إنشاء سلسلة نصية باستخدام الباني String()

const msg = new String("Yes, You Can DO It!");

ومن الخصائص المهمة في السلاسل النصية داخل JavaScript أنه يمكن الوصول إلى كل حرف عبر فهرسه index. يبدأ أول حرف من الفهرس 0 ثم يزداد بمقدار واحد لكل حرف لاحق.

let str = "Yes, You Can Do It!";
console.log(str[0]); // Y
console.log(str[1]); // e
console.log(str[2]); // s
console.log(str[3]); // ,
console.log(str[10]); // a

غلاف توضيحي لشرح دالة split في جافاسكريبت وتقسيم النص إلى مصفوفةرسم يوضح الوصول إلى أحرف السلسلة النصية في JavaScript باستخدام الفهرس

إلى جانب الوصول إلى الأحرف عبر الفهارس، توفر JavaScript مجموعة كبيرة من الدوال المساعدة لمعالجة النصوص، ومن أهمها الدالة split() التي سنتناولها بالتفصيل في هذا المقال.

ما وظيفة الدالة split() في JavaScript؟

تقوم الدالة split() بتقسيم سلسلة نصية واحدة إلى عدة أجزاء أصغر اعتماداً على فاصل splitter. يمكن أن يكون هذا الفاصل:

  • حرفاً واحداً.
  • نصاً معيناً.
  • تعبيراً نمطياً Regular Expression.

بعد إتمام عملية التقسيم، تُرجع الدالة split() مصفوفة array تحتوي على الأجزاء الناتجة، من دون تعديل النص الأصلي.

الصيغة العامة

string.split(splitter, limit);

تقبل الدالة معاملين:

  • splitter: الفاصل الذي يحدد مواضع التقسيم.
  • limit: قيمة اختيارية تحدد عدد العناصر التي ستظهر في المصفوفة الناتجة.

كيفية تقسيم النص باستخدام مسافة

لنفترض أن لدينا النص التالي:

let message = 'I am a Happy Go lucky Guy';

إذا أردنا تقسيمه إلى كلمات، فيمكننا استخدام المسافة ' ' كفاصل:

// Split using a space character
let arr = message.split(' ');

// The array
console.log(arr);
// ["I", "am", "a", "Happy", "Go", "lucky", "Guy"]

// Access each of the elements of the array.
console.log(arr[0]); // "I"
console.log(arr[1]); // "am"
console.log(arr[2]); // "a"
console.log(arr[3]); // "Happy"
console.log(arr[4]); // "Go"
console.log(arr[5]); // "lucky"
console.log(arr[6]); // "Guy"

هذا الاستخدام من أكثر الحالات شيوعاً، خاصة عند التعامل مع الأسماء، والجمل، والكلمات المفتاحية، أو أي نص يحتاج إلى تفكيك منظم.

كيفية تقسيم النص إلى أحرف منفصلة

إذا استخدمت سلسلة فارغة '' كفاصل، فسيتم تقسيم النص إلى أحرف منفردة:

console.log(message.split(''));
// ["I", " ", "a", "m", " ", "a", " ", "H", "a", "p", "p", "y", " ", "G", "o", " ", "l", "u", "c", "k", "y", " ", "G", "u", "y"]

يفيد هذا الأسلوب في حالات مثل:

  • تحليل كل حرف على حدة.
  • عدّ الأحرف أو المسافات.
  • تنفيذ عمليات تحويل مخصصة على مستوى الحرف.

ملاحظة مهمة

عند استدعاء split('') على نص فارغ ''، ستكون النتيجة مصفوفة فارغة:

''.split(''); // returns []

ماذا يحدث عند استخدام split() دون فاصل؟

إذا استدعيت الدالة split() من دون تمرير أي معامل، فإنها تُرجع مصفوفة تحتوي على النص كاملاً كعنصر واحد:

let message = 'I am a Happy Go lucky Guy';
console.log(message.split());
// returns ["I am a Happy Go lucky Guy"]

وهذا يعني أن الدالة لم تجد تعليمات للتقسيم، فاحتفظت بالنص كما هو داخل المصفوفة.

الفرق بين النص الفارغ مع فاصل وبدون فاصل

// Returns an empty array
''.split(''); // returns []

// Returns an array with an empty string
''.split(); // returns [""]

هذا الفرق دقيق لكنه مهم جداً عند اختبار الشيفرات أو معالجة البيانات الفارغة.

التقسيم باستخدام فاصل غير موجود في النص

في بعض الأحيان قد تستخدم فاصلاً لا يظهر أصلاً داخل السلسلة النصية. في هذه الحالة، لن يحدث أي تقسيم فعلي، وستُرجع الدالة النص كاملاً داخل مصفوفة:

let message = 'I am a Happy Go lucky Guy';
console.log(message.split(','));
// ["I am a Happy Go lucky Guy"]

هذه الحالة شائعة أثناء تصحيح الأخطاء debugging، خصوصاً إذا كان الفاصل المكتوب غير صحيح أو لا يطابق البنية الفعلية للنص.

استخدام المعامل limit لتحديد عدد النتائج

تتيح لك الدالة split() تمرير معامل ثانٍ اسمه limit من أجل تحديد عدد العناصر الناتجة فقط، حتى لو كان النص قابلاً للتقسيم إلى أجزاء أكثر.

let message = 'I am a Happy Go lucky Guy';
console.log(message.split(' ', 4));
// ["I", "am", "a", "Happy"]

هذا الخيار مفيد عندما تحتاج إلى أول عدد محدد من الأجزاء فقط، مثل استخراج الاسم الأول والثاني أو تحليل بداية سطر معين دون الحاجة إلى معالجة بقية البيانات.

التقسيم باستخدام التعبيرات النمطية Regex

لا يقتصر عمل split() على الفواصل النصية البسيطة، بل يمكن أيضاً تمرير تعبير نمطي regex لتقسيم أكثر مرونة واحترافية.

لنأخذ المثال التالي:

let message = 'The sky is blue. Grass is green! Do you know the color of the Cloud?';

إذا أردنا تقسيم النص عند النقطة . أو علامة التعجب ! أو علامة الاستفهام ?، يمكننا كتابة تعبير نمطي يطابق هذه العلامات:

let sentences = message.split(/[.,!,?]/);
console.log(sentences);

مثال يوضح تقسيم النص في JavaScript باستخدام تعبير نمطي مع الدالة split

يمكنك أيضاً دمج هذا الأسلوب مع المعامل limit للحصول على عدد محدد من النتائج:

sentences = message.split(/[.,!,?]/, 3);
console.log(sentences);

توضيح لاستخدام الدالة split مع regex وتحديد limit في JavaScript

التقاط الفواصل نفسها داخل النتيجة

إذا أردت أن تظهر العلامات المطابقة نفسها ضمن المصفوفة الناتجة، فيمكن تعديل التعبير النمطي باستخدام الأقواس:

/([.,!,?])/

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

كيفية استبدال الأحرف باستخدام split() مع join()

من الاستخدامات العملية للدالة split() دمجها مع الدالة join() من أجل استبدال جميع تكرارات حرف معين داخل النص.

لنفترض أنك تريد إنشاء قيمة id لعنصر HTML انطلاقاً من اسم يحتوي على مسافات، بينما يجب أن تكون قيمة id خالية من المسافات:

let name = 'Tapas Adhikary';
let subs = name.split(' ');
console.log(subs); // ["Tapas", "Adhikary"]

let joined = subs.join('-');
console.log(joined); // Tapas-Adhikary

في هذا المثال:

  1. جرى تقسيم الاسم باستخدام المسافة عبر split(' ').
  2. نتجت مصفوفة تحتوي على جزأين: ['Tapas', 'Adhikary'].
  3. ثم أُعيد دمج العناصر باستخدام join('-') للحصول على النص Tapas-Adhikary.

هذه الطريقة شائعة عند إنشاء روابط صديقة لمحركات البحث، أو معرفات عناصر، أو تحويل القيم النصية إلى صيغة مناسبة للاستخدام البرمجي.

استخدام Array Destructuring مع split() في ES6

قدمت ECMAScript 2015 أو ES6 أسلوباً مريحاً لاستخراج القيم من المصفوفات وإسنادها مباشرة إلى متغيرات، ويُعرف ذلك باسم Array Destructuring.

يمكن توظيف هذا الأسلوب مع split() لتقليل عدد الأسطر وجعل الشيفرة أوضح:

let name = 'Tapas Adhikary';
let [firstName, lastName] = name.split(' ');
console.log(firstName, lastName);

هنا تم تقسيم النص إلى جزأين، ثم إسناد كل جزء مباشرة إلى المتغيرين firstName وlastName. هذا الأسلوب ممتاز عندما تكون بنية النص معروفة مسبقاً، مثل الاسم الأول والأخير أو القيم المفصولة بعلامة ثابتة.

متى تكون الدالة split() مفيدة عملياً؟

رغم أن الدالة تبدو بسيطة، فإنها تدخل في عشرات الاستخدامات اليومية للمطورين، مثل:

  • تحويل الجمل إلى كلمات.
  • معالجة البيانات القادمة من API.
  • قراءة القيم المفصولة بفواصل أو مسافات.
  • إنشاء معرفات وروابط نصية منظمة.
  • تحليل السطور أو الجمل اعتماداً على علامات الترقيم.

والأفضل من ذلك أن الدالة لا تغيّر النص الأصلي، مما يجعل استخدامها آمناً في كثير من السيناريوهات.

أفضل الملاحظات التي يجب تذكرها عند استخدام split()

  • الدالة split() تُرجع دائماً مصفوفة.
  • النص الأصلي لا يتغير بعد تنفيذ العملية.
  • يمكن أن يكون الفاصل حرفاً أو نصاً أو تعبيراً نمطياً.
  • استخدام limit يقيّد عدد العناصر الناتجة فقط.
  • إذا لم يُعثر على الفاصل داخل النص، فستحصل على النص كاملاً كعنصر واحد.
  • هناك فرق مهم بين ''.split('') و''.split().

الخلاصة التقنية

تُعد الدالة split() من الأدوات الأساسية في معالجة النصوص داخل JavaScript. قوتها لا تكمن فقط في تقسيم السلاسل النصية، بل في مرونتها عند الدمج مع أدوات أخرى مثل join() وregex وArray Destructuring. ومن الناحية العملية، فإن فهم سلوكها في الحالات الطرفية، مثل النصوص الفارغة أو الفواصل غير المطابقة، يمنح المطور قدرة أفضل على كتابة شيفرات أدق وأسهل في الصيانة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *