ما هو التعبير النمطي؟
التعبير النمطي (regex) نمط يصف مجموعة من السلاسل: فئات المحارف ([0-9]) والمكرِّرات (+ و* و{2,4}) والمراسي (^ و$) والمجموعات تتألف لتكوّن قواعد يطبّقها المطابِق على النص. تتحقق التعابير من الصيغ وتستخرج الحقول وتقود البحث والاستبدال؛ تعرّف ECMA-262 نكهة JavaScript، والفروق الصغيرة بين المحركات هي سبب وجوب اختبار النمط بالمحرك الذي سيشغّله.
اقرأ الدليل: التعابير النمطية (Regex) للمبتدئين
كيفية استخدام شارح Regex
- الصق التعبير النمطي (تعمل أيضاً الصيغة الحرفية مثل /…/gi).
- أدخل الرايات التي تستخدمها حتى تُوصف المراسي والنقطة بشكل صحيح.
- اقرأ الملخص والجدول؛ ووسّع شجرة التحليل للاطلاع على البنية الكاملة.
مزايا شارح Regex
- جدول رمزاً برمز يعرض نوع كل عنصر وجملة شرح مبسّطة له بالإنجليزية
- عرض متداخل للمجموعات والفئات والعناصر المحدَّدة كمياً
- يفهم المجموعات المسمّاة، والنظرة الأمامية/الخلفية (lookahead/lookbehind)، والمحدِّدات الكمية الكسولة، والمراجع الخلفية، وخصائص Unicode
- صياغة تراعي الرايات لرموز ^ و$ والنقطة
- شجرة تحليل بصيغة JSON للتوثيق أو للأدوات
- موضع دقيق للخطأ عندما يكون النمط غير صالح
مثال على شارح Regex
شرح نمط تاريخ بصيغة ISO
الإدخال:
^(?<year>\d{4})-(?<month>0[1-9]|1[0-2])$النتيجة:
^ → Asserts position at the start of the string.
(?<year>\d{4}) → Named capturing group "year" (#1)…
\d{4} → Matches a digit (0–9), exactly 4 times (greedy).
- → Matches a hyphen "-" literally.
(?<month>0[1-9]|1[0-2]) → Named capturing group "month" (#2)…
$ → Asserts position at the end of the string.الأسئلة الشائعة حول شارح Regex
ما الذي يفهمه الشارح؟
الأحرف الحرفية، وتسلسلات الهروب (\d \w \s \b و\xhh و\uhhhh و\p{…})، وفئات الأحرف والنطاقات، وجميع أنواع المجموعات (الالتقاطية، والمسمّاة، وغير الالتقاطية، والنظرة الأمامية، والنظرة الخلفية)، والمحدِّدات الكمية الجشعة والكسولة، والتناوب، والمراسي، والمراجع الخلفية المرقّمة أو المسمّاة.
لماذا يذكر الشرح multiline أو dotAll؟
تغيّر الرايات معنى ^ و$ والنقطة. أدخل الرايات التي تستخدمها حتى تطابق الصياغة السلوك الفعلي.
هل يمكنه شرح الصياغة الخاصة بـ PCRE أو Python؟
معظم الصياغة مشتركة، لكن التراكيب الخاصة بمحركات بعينها مثل المحدِّدات الكمية التملّكية (a++) والمجموعات الذرّية (?>…) والرايات المضمّنة (?i) ليست جزءاً من JavaScript ويُبلَّغ عنها كأخطاء.
كيف تُرقَّم المجموعات؟
بحسب موضع قوسها الافتتاحي من اليسار إلى اليمين. ولا تحصل المجموعات غير الالتقاطية والنظرات الأمامية/الخلفية على رقم.
ملاحظات تقنية
يبني محلّل تنازلي تكراري (recursive-descent) مكتوب يدوياً شجرة صياغة مجردة (AST) بترتيب: تناوب ← تسلسل ← ذرّات محدَّدة كمياً، على غرار قواعد ECMAScript. وتحمل كل عقدة نصها المصدري الخام ومواضعها ووصفها؛ ويشغّل المحلّل نفسه حارس التراجع الكارثي في أداة اختبار Regex.
المراجع
- ECMAScript® Language Specification (ECMA-262)معيار لغة JavaScript، بما فيه قواعد RegExp ودلالاتها، وJSON.parse/JSON.stringify، وكائن Date.
- Regular expressions — JavaScript guide — MDNمرجع عملي لصياغة التعابير النمطية كما تنفذها محركات JavaScript: فئات المحارف والمجموعات والمكرِّرات والأعلام.
- OWASP Cheat Sheet Series: Input Validationالتحقق بقوائم السماح، والفرق بين الفحص النحوي والدلالي، ولماذا لا يُعدّ التحقق في المتصفح ضابطاً أمنياً أبداً.