في هذا الدرس 5تصفّح المواضيع
يُمثل التعبير النمطي (RegExp) كائناً وصفياً مختصراً يحدد شكل السلسلة النصية المطلوبة؛ فيغنيك عن عشرات الحلقات والشروط المعقدة عند التحقق من صيغة رمز بريدي أو استخراج الوسوم أو إخفاء أرقام البطاقات.
فبدلاً من فحص الحروف يدوياً حرفاً تلو حرف، تصف القاعدة مرة واحدة ليتولى محرك RegExp المدمج مطابقتها بسرعة عالية.
تتيح JavaScript طريقتين لإنشاء التعبير النمطي: الصيغة الحرفية بين شرطتين مائلتين /pattern/flags للأنماط الثابتة المعروفة سلفاً، والباني new RegExp(source, flags) عند الحاجة لتكوين النمط ديناميكياً أثناء التشغيل:
| العَلَم (Flag) | الوظيفة الدقيقة | حالة الاستخدام العملية |
|---|---|---|
g (شامل) | البحث عن كافة المطابقات بالنص لا الأولى فقط | استخراج كل الوسوم عبر matchAll |
i (تجاهل الحالة) | مطابقة الحروف الكبيرة والصغيرة دون تفريق | البحث غير الحساس لحالة الأحرف |
u (يونيكود) | دعم كامل لمحارف Unicode واللغات العالمية | مطابقة الحروف العربية والرموز التعبيرية بدقة |
m (متعدد الأسطر) | جعل ^ و$ يطابقان بداية ونهاية كل سطر | فحص سجلات متعددة السطور |
تتألف الأنماط المحكمة من ثلاث لبنات متكاملة:
- فئات المحارف:
\dللأرقام0-9، و\wلمحارف الكلمات الإنجليزية، و\sللمسافات، أو فئة مخصصة مثل[a-z0-9_-]. - المراسي (Anchors):
^لبداية النص و$لنهايته؛ فبدونهما يقبل النمط وجود محارف غريبة قبل الجزء المطابق أو بعده! - المكممات (Quantifiers):
+لواحد فأكثر، و?للاختياري، والمدى الدقيق{3,16}لتحديد أقل وأقصى طول.
const slugRule = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
const ok = slugRule.test('json-data-types');
const bad = slugRule.test('Bad_Slug!');
document.getElementById('rx-out').textContent =
'Valid slug: ' + ok + ' | Invalid slug: ' + bad;
اختر الدالة الأنسب بحسب النتيجة التي تحتاجها:
regex.test(str)— أسرع فحص منطقي يُرجعtrueأوfalse(تجنب وضع العلم/gمع دالةtestالمتكررة!).Array.from(str.matchAll(/.../g))— لاستخراج كافة المطابقات ومجموعات الالتقاط المسماة(?<year>\d{4}).str.replace(regex, ...)— لإخفاء البيانات الحساسة أو تنسيق النصوص في سلسلة جديدة.
const logLine = 'Order #4821 on 2026-11-06 — Card 4111-2222-3333-9876';
const dateMatch = /(?<yr>\d{4})-(?<mo>\d{2})-(?<dy>\d{2})/.exec(logLine);
const masked = logLine.replace(/\d{4}-\d{4}-\d{4}-(\d{4})/, '****-****-****-$1');
document.getElementById('m-out').textContent =
'Year: ' + dateMatch.groups.yr + ' | ' + masked;
تنشأ ثغرة حجب الخدمة بالتعبيرات النمطية (ReDoS) عند كتابة نمط غامض يضم مكممات متداخلة مثل /(a+)+$/ وتمرير نص طويل ينتهي بحرف غير مطابق؛ إذ يجرب المحرك ملايين المسارات التراجعية الأسية قبل إعلان الفشل مما يجمد تبويب المتصفح أو يعطل الخادم تماماً!
احمِ تطبيقاتك من بطء ReDoS بثلاث قواعد صارمة:
- امنع تداخل المكممات التكرارية مثل
(x+)+واستبدلها بنمط خطي بسيطx+أو مدى محدد{1,64}. - افحص طول المدخلات أولاً (
str.length <= 254) قبل تمريرها لأي نمط معقد. - لا تمرر نصاً كتبه المستخدم مباشرةً إلى
new RegExp(userInput)دون تهريب رموزه الخاصة!
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس التعبيرات النمطية RegExp بصيغتيها الحرفية والديناميكية، والأعلام الأساسية، وفئات المحارف والمراسي والمكممات، ودوال test وmatchAll وreplace، والوقاية من ثغرات التراجع الكارثي ReDoS. الخطوة التالية: انتقل إلى درس «اكتشاف وتصحيح الأخطاء البرمجية في JavaScript» لإتقان أدوات التشخيص وجداول المراقبة ونقاط التوقف.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات3
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 RegExp Anchors (^ and $) مرساتا البداية والنهاية (^ و$)
- رمزا تثبيت يضمنان مطابقة النمط لكامل السلسلة النصية من أول حرف (^) حتى آخر حرف ($).
- للمراجعة
- 02 Named Capture Group مجموعة الالتقاط المسماة
- صياغة (?<name>...) تحفظ الجزء المطابق باسم واضح داخل الكائن match.groups لقراءة سهلة.
- للمراجعة
- 03 Catastrophic Backtracking (ReDoS) التراجع الكارثي ReDoS
- تباطؤ أسي حاد يجمد المتصفح أو الخادم عند فشل نمط يضم مكممات متداخلة غامضة على نص طويل.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات2
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 ReDoS ReDoS
- Regular Expression Denial of Service
- حجب الخدمة عبر التعبيرات النمطية الناتج عن التراجع الأسي في الأنماط المتداخلة غير المحدودة.
- للمراجعة
- 02 UTF UTF
- Unicode Transformation Format
- ترميز المحارف العالمي الذي يتعامل معه التعبير النمطي بدقة تامة عند تفعيل العلم u.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
استبدل النص الخاطئ في محرر التجربة الأول بالمعرف السليم "dom-nodes-new" وتأكد من تحول النتيجتين إلى true.
-
اعرض قيمة الشهر dateMatch.groups.mo بجانب السنة في محرر التجربة الثاني للتأكد من عمل المجموعات المسماة.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.