البرمجة

التعابير النمطية في جافاسكربت

أساسيات البحث باستخدام التعابير النمطية في جافاسكربت

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


ما هي التعابير النمطية؟

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


تركيب التعابير النمطية في جافاسكربت

في جافاسكربت، يمكن تعريف التعابير النمطية بطريقتين رئيسيتين:

  1. عن طريق كتابة النمط بين علامتي / … /

    مثال:

    javascript
    let regex = /abc/;

    هذا يعرف نمطًا يبحث عن النص “abc” في أي مكان داخل السلسلة النصية.

  2. عن طريق استخدام الكائن RegExp

    مثال:

    javascript
    let regex = new RegExp("abc");

    تسمح هذه الطريقة ببناء نمط ديناميكي باستخدام متغيرات.


مكونات التعابير النمطية الأساسية

تتكون التعابير النمطية من مجموعة من الرموز والأحرف التي تحدد نمط البحث، وأبرز هذه المكونات:

  • الأحرف العادية: وهي الأحرف التي تُطابق نفسها حرفياً مثل a, b, 1, @.

  • الرموز الخاصة: مثل . الذي يمثل أي حرف مفرد، \d الذي يمثل رقمًا (digit)، \w الذي يمثل حرفًا أو رقمًا أو الشرطة السفلية، \s الذي يمثل مسافة أو حرف تحكم.

  • المحددات (Quantifiers): مثل * (صفر أو أكثر)، + (واحد أو أكثر)، ? (صفر أو واحد)، {n,m} (بين n و m مرات).

  • مجموعات الاختيار: باستخدام الأقواس المربعة [] لتحديد مجموعة من الأحرف المحتملة.

  • المجموعات (Groups): باستخدام الأقواس العادية () لتجميع أجزاء من النمط لاستخدامها في المطابقة أو التقاط النتائج.

  • الرموز الحدودية: مثل ^ لبدء النص و$ لنهاية النص.

  • العبارات البديلة: باستخدام | لتحديد بدائل متعددة داخل النمط.


استخدام التعابير النمطية في جافاسكربت

طرق مطابقة النصوص

توفر جافاسكربت مجموعة من الطرق للكائنات النصية وللتعابير النمطية تمكن المطورين من إجراء عمليات البحث والمطابقة، وأبرزها:

  • طريقة test

    هذه الطريقة تابعة لكائن RegExp، وتُستخدم لفحص ما إذا كان النص يحتوي على نمط معين.

    javascript
    let regex = /hello/; let result = regex.test("hello world"); // true
  • طريقة exec

    تستخدم للبحث عن نمط داخل نص وإرجاع معلومات تفصيلية عن المطابقة. إذا لم يجد النمط، تعيد null.

    javascript
    let regex = /hello/; let result = regex.exec("hello world"); console.log(result[0]); // "hello"
  • طرق النص match وmatchAll

    تستخدم مع النصوص وتعيد نتائج البحث المطابق للنمط.

    • match تعيد المصفوفة الأولى للمطابقات أو null إذا لم يجد شيئًا.

    • matchAll تعيد كائنًا قابلًا للتكرار يحتوي على جميع المطابقات المفصلة.

  • طريقة replace

    تسمح باستبدال أجزاء من النص بناءً على نمط محدد.

    javascript
    let text = "The cat sat on the mat."; let newText = text.replace(/cat/, "dog"); console.log(newText); // "The dog sat on the mat."
  • طريقة search

    تعيد موقع أول ظهور للنمط في النص، أو -1 إذا لم يكن موجودًا.


الأعلام في التعابير النمطية (Flags)

يمكن استخدام الأعلام لتعديل سلوك البحث، وأهم الأعلام في جافاسكربت:

  • g (global): البحث عن كل المطابقات في النص وليس أول واحدة فقط.

  • i (ignore case): تجاهل حالة الأحرف (كبير/صغير).

  • m (multiline): يعالج النص كسلسلة متعددة الأسطر بحيث تتعامل ^ و $ مع بداية ونهاية كل سطر.

  • s (dotAll): يسمح للنقطة . بمطابقة أي حرف بما في ذلك محارف السطر الجديد.

  • u (unicode): لتفعيل الدعم الكامل لأحرف اليونيكود.

  • y (sticky): يبدأ البحث من الموضع الحالي للنمط في النص دون القفز.


أمثلة عملية لاستخدام التعابير النمطية في البحث

البحث عن أرقام في نص

javascript
let regex = /\d+/g; // البحث عن تسلسل من الأرقام let str = "My phone number is 12345 and my zip code is 67890."; let matches = str.match(regex); console.log(matches); // ["12345", "67890"]

التحقق من صحة البريد الإلكتروني

يُستخدم نمط معقد نوعًا ما للبحث عن تنسيق البريد الإلكتروني:

javascript
let emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; console.log(emailRegex.test("[email protected]")); // true console.log(emailRegex.test("example@test")); // false

استخراج الكلمات التي تبدأ بحرف معين

مثلاً استخراج جميع الكلمات التي تبدأ بحرف “s”:

javascript
let regex = /\bs\w*/gi; let text = "She sells sea shells by the sea shore."; let words = text.match(regex); console.log(words); // ["She", "sells", "sea", "shells", "sea", "shore"]

التعامل مع نتائج البحث

عند إجراء بحث باستخدام التعابير النمطية، يمكن التعامل مع النتائج بطرق متعددة، منها:

  • استخدام مجموعات التقاط (Capture Groups): تتيح التقاط أجزاء محددة من النص المطابق داخل الأقواس العادية. تُستخدم هذه المجموعات لتقسيم النص إلى أجزاء يمكن التعامل معها بشكل منفصل.

javascript
let regex = /(\d{4})-(\d{2})-(\d{2})/; let date = "2024-05-18"; let match = regex.exec(date); console.log(match[1]); // السنة: 2024 console.log(match[2]); // الشهر: 05 console.log(match[3]); // اليوم: 18
  • استخدام replace مع دوال: يمكن استخدام دالة كوسيط في replace لتعديل النص بناءً على نتائج البحث.

javascript
let text = "Price: $20"; let newText = text.replace(/\$(\d+)/, (match, p1) => { return `$${parseInt(p1) * 2}`; }); console.log(newText); // "Price: $40"

الجدول التالي يوضح أهم الرموز والرموز الخاصة في التعابير النمطية مع شرح مبسط لكل منها

الرمز الوصف مثال النتيجة
. أي حرف مفرد (باستثناء السطر الجديد) /a.b/ تطابق “aab”، “acb”، “a9b”
\d رقم (0-9) /\d+/ يطابق تسلسل أرقام
\w حرف أو رقم أو _ /\w+/ يطابق كلمات أو أرقام
\s مسافة أو مسافات بيضاء /\s+/ يطابق المسافات
* صفر أو أكثر من العنصر السابق /ab*c/ يطابق “ac”, “abc”, “abbc”
+ واحد أو أكثر /ab+c/ يطابق “abc”, “abbc”
? صفر أو واحد /ab?c/ يطابق “ac” أو “abc”
^ بداية النص أو السطر /^Hello/ تطابق “Hello” في بداية النص
$ نهاية النص أو السطر /world$/ تطابق “world” في نهاية النص
[] مجموعة من الأحرف /[aeiou]/ تطابق أي حرف من الحروف المتضمنة
() مجموعة التقاط (تجميع) /(\d{3})/ تجميع 3 أرقام متتالية
` ` اختيار بين بدائل `/cat

نصائح عملية لاستخدام التعابير النمطية بفعالية في جافاسكربت

  • ابدأ ببناء الأنماط تدريجياً: قم بكتابة نمط بسيط ثم زد تعقيده تدريجيًا مع اختبار النتائج في كل مرحلة.

  • استخدم أدوات اختبار التعابير النمطية: مثل Regex101 وRegExr لتجربة الأنماط وفهم سلوكها بدقة.

  • احذر من الأنماط التي قد تؤدي إلى بطء في الأداء: خاصة الأنماط التي تستخدم تكرار زائد أو غير محدد على نصوص طويلة.

  • استخدم المجموعات التلقائية (Non-capturing groups) (?:...) عند عدم الحاجة للقبض على النص: لتحسين الأداء وتقليل التعقيد.

  • تجنب استخدام eval أو إدخال أنماط من مصادر غير موثوقة: لتجنب مخاطر أمنية.


خلاصة

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


المصادر