دليل شامل لاستخلاص النصوص الفرعية في JavaScript: مقارنة بين دوال `substring()` و `slice()` و `substr()`

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

في عالم البرمجة اليومي، تُعد معالجة النصوص (Strings) جزءًا لا يتجزأ من مهامنا. لحسن الحظ، يوفر لنا JavaScript مجموعة غنية من الدوال المدمجة التي تُسهل التعامل مع أنواع البيانات المختلفة مثل المصفوفات (Arrays) والنصوص (Strings) وغيرها. يمكننا استخدام هذه الدوال لإجراء عمليات متنوعة مثل البحث، الاستبدال، ودمج النصوص.

من بين العمليات الأكثر شيوعًا في JavaScript هي استخلاص جزء من نص معين، أو ما يُعرف بالنص الفرعي (Substring). في هذا المقال، سنتعمق في كيفية الحصول على نص فرعي باستخدام ثلاث دوال مختلفة ومدمجة في اللغة. ولكن قبل ذلك، دعونا نوضح بإيجاز ما هو النص الفرعي.

ما هو النص الفرعي (Substring)؟

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

"I am learning JavaScript and it is cool!" --> النص الأصلي
"I am learning JavaScript" --> نص فرعي
"JavaScript is cool!" --> نص فرعي آخر

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

1. استخدام الدالة `substring()`

لنبدأ بالدالة substring(). تقوم هذه الدالة بشكل أساسي باستخراج جزء من النص الأصلي وإعادته كنص جديد. تتطلب دالة substring() معاملين:

string.substring(startIndex, endIndex);
  • startIndex: يمثل نقطة البداية للنص الفرعي (مؤشر الحرف الأول الذي سيتم تضمينه).
  • endIndex: يمثل نقطة النهاية للنص الفرعي (مؤشر الحرف الذي لن يتم تضمينه، وهو اختياري).

دعنا نرى مثالًا عمليًا. لنفترض أن لدينا النص التالي:

const myString = "I am learning JavaScript and it is cool!";

إذا قمنا بتعيين startIndex على 0 و endIndex على 10، فسنحصل على أول 10 أحرف من النص الأصلي. تذكر دائمًا أن فهرس الحرف الأول هو 0.

مثال على استخدام دالة substring() مع تحديد startIndex و endIndex لاستخلاص نص فرعي

أما إذا قمنا بتعيين startIndex فقط دون تحديد endIndex، فسنحصل على نص فرعي يبدأ من الفهرس المحدد ويمتد حتى نهاية النص الأصلي:

مثال على استخدام دالة substring() مع تحديد startIndex فقط لاستخلاص نص فرعي حتى النهاية

نقاط إضافية حول `substring()`:

  • إذا كان startIndex يساوي endIndex، تُرجع الدالة substring() نصًا فارغًا.
  • إذا كان كل من startIndex و endIndex أكبر من طول النص الأصلي، تُرجع الدالة نصًا فارغًا.
  • إذا كان startIndex أكبر من endIndex، تقوم الدالة substring() بتبديل المعاملين تلقائيًا وتُرجع نصًا فرعيًا كما لو كان endIndex أكبر من startIndex.

2. استخدام الدالة `slice()`

تُعد الدالة slice() مشابهة جدًا للدالة substring()، وهي أيضًا تُرجع نصًا فرعيًا من النص الأصلي. تتطلب دالة slice() نفس المعاملين:

string.slice(startIndex, endIndex);
  • startIndex: يمثل نقطة البداية للنص الفرعي.
  • endIndex: يمثل نقطة النهاية للنص الفرعي (اختياري).

نقاط مشتركة بين `substring()` و `slice()`:

  • إذا لم نحدد endIndex، فسنحصل على نص فرعي يبدأ من الفهرس المعطى ويمتد حتى نهاية النص الأصلي.

مثال على استخدام دالة slice() بدون تحديد endIndex لاستخلاص نص فرعي

  • إذا قمنا بتعيين كل من startIndex و endIndex، فسنحصل على الأحرف الواقعة بين الفهرسين المحددين من النص الأصلي.

مثال على استخدام دالة slice() مع تحديد startIndex و endIndex لاستخلاص نص فرعي

  • إذا كان كل من startIndex و endIndex أكبر من طول النص، تُرجع الدالة نصًا فارغًا.

اختلافات الدالة `slice()`:

  • إذا كان startIndex أكبر من endIndex، تُرجع الدالة slice() نصًا فارغًا (على عكس substring() التي تقوم بتبديل المعاملات).
  • إذا كان startIndex رقمًا سالبًا، يبدأ استخلاص النص من نهاية النص الأصلي (أي العد العكسي).

مثال على استخدام دالة slice() مع فهرس بداية سالب لاستخلاص نص فرعي من نهاية النص

ملاحظة: يمكن استخدام الدالة slice() أيضًا مع مصفوفات JavaScript، مما يجعلها أداة متعددة الاستخدامات.

3. استخدام الدالة `substr()`

وفقًا لوثائق Mozilla، تُعتبر الدالة substr() دالة قديمة (legacy function) ويجب تجنب استخدامها في المشاريع الجديدة. ومع ذلك، سأشرح بإيجاز ما تفعله، لأنه قد تصادفها في المشاريع القديمة أو قواعد الأكواد الموجودة.

تُرجع الدالة substr() أيضًا نصًا فرعيًا من النص الأصلي وتتطلب معاملين:

string.substr(startIndex, length);
  • startIndex: يمثل نقطة البداية للنص الفرعي.
  • length: عدد الأحرف المراد تضمينها في النص الفرعي (اختياري).

هنا يكمن الاختلاف الجوهري: تتوقع الدالة substr() المعامل الثاني كـ length (طول) بدلاً من endIndex (فهرس النهاية).

مثال على استخدام دالة substr() مع تحديد startIndex و length لاستخلاص نص فرعي

في هذا المثال، تقوم الدالة بعد 5 أحرف بدءًا من startIndex المحدد وإعادتها كنص فرعي. ومع ذلك، إذا لم نحدد المعامل الثاني (length)، فإنها تُرجع النص حتى نهاية النص الأصلي (تمامًا كما تفعل الدالتان السابقتان):

مثال على استخدام دالة substr() بدون تحديد length لاستخلاص نص فرعي حتى النهاية

ملاحظة هامة: جميع هذه الدوال الثلاث (substring()، slice()، و substr()) تُرجع النص الفرعي كنص جديد، ولا تُغير النص الأصلي أبدًا.

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

لقد استعرضنا في هذا المقال ثلاث طرق أساسية لاستخلاص النصوص الفرعية في JavaScript: دوال substring()، slice()، و substr(). من الضروري فهم الفروقات الدقيقة بينها لاختيار الأداة الأنسب لكل مهمة. بينما تُعد substring() و slice() الخيارات المفضلة في التطوير الحديث، مع تفضيل slice() لقدرتها على التعامل مع الفهارس السالبة ومرونتها الأكبر، يجب تجنب substr() نظرًا لكونها دالة قديمة وقد تُزال في الإصدارات المستقبلية من JavaScript. تذكر دائمًا أن هذه الدوال لا تُعدّل النص الأصلي، بل تُنشئ نسخة جديدة منه، مما يحافظ على سلامة البيانات الأصلية في تطبيقك.

اترك تعليقاً

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