الأدوات
الأدلة

مختبر التعبيرات النمطية

تطوير

اختبر تعبيرات JavaScript النمطية مع تلوين التطابقات ومجموعات الالتقاط.

100% من جهة العميل بدون خادم خلفي
الإخراج
    في هذه الصفحة

    ما هو مُختبر التعبيرات النمطية؟#

    التعبير النمطي (regex) ترميز مختصر لوصف الأنماط في النص: «كل ما يشبه البريد الإلكتروني»، و«الكلمة الثالثة من كل سطر»، و«كل الأرقام التي ليست داخل علامتي اقتباس». كتابة النمط نصف المهمّة فقط — ونصفها الآخر رؤية ما يطابقه فعلًا، على نصّ يشبه نصّك، قبل أن تُلصقه في شيفرة الإنتاج. ومُختبر regex هو الصفحة التي تفعل ذلك فيها.

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

    كيفية الاستخدام#

    1. أدخل النمط بين علامتي / في أعلى اليسار. لا تكتب الشرطتين المائلتين بنفسك — فهما مرسومتان لك كما يُكتب التعبير النمطي الحرفي في الكود.
    2. أدخل الأعلام في المربع الصغير على يمين النمط. أكثرها استخدامًا:
      • g — إيجاد كل التطابقات لا الأول فقط.
      • i — غير حسّاس لحالة الأحرف.
      • m — يطابق ^ و$ بداية ونهاية كل سطر، لا السلسلة كلها.
      • s — يتيح لـ . مطابقة الأسطر الجديدة أيضًا.
      • u — معاملة النمط كـ Unicode (يهمّ للإيموجي وغير ASCII).
    3. الصق نصّ الاختبار في المربع بالأسفل. استخدم نصًّا يشبه مُدخلك الحقيقي فعلًا — فالنمط الذي يعمل على أمثلة مرتّبة يُخطئ كثيرًا على بيانات أكثر فوضى.
    4. اقرأ المعاينة المُبرَزة على اليمين: كل تطابقة معروضة في مكانها وفي سياقها. وتحتها مجموعة التقاط مُدرجة بفهرسها ونصّها الملتقط والإزاحة التي وُجدت فيها.

    الميزات الرئيسية#

    • إبراز حيّ. كل تطابقة معروضة في مكانها على النص الأصلي، فرؤية الحدود بعينك تكون فورية — بما فيها الحالة الحرجة حين يمتدّ تطابق عبر مسافة بيضاء.
    • قائمة التقاط لكل مجموعة. فهرس المجموعة والمقطع الفرعي المطابق وإزاحة المحارف، صفّ لكل التقاط. ضروريٌّ حين يحوي النمط ثلاث مجموعات أوأربع وتحتاج معرفة أيّتها أيّة.
    • أعلام متعدّدة دفعةً واحدة. اجمع بين g وi وm وs وu بحرّية (مثلًا giu لعمومي وغير حساس لحالة الأحرف وواعٍ لـ Unicode).
    • تنبيه ReDoS. بعض الأنماط — عادةً المُحَدِّدات الكمية المتداخلة مثل (a+)+ — قد تنفجر أُسّيًّا على مُدخل مصنوع. يُنبّه سطر الحالة النمط نفسه لحظة أن يطابق، داعيًا إيّاك لتبسيطه قبل أن يصطدم بمُدخلٍ معادٍ. يقرأ الفحص شكل نمطك؛ فهو لا يقيس مدّة آخر تشغيل، وقد يُجمّد نمطٌ كارثي فعلًا التبويب — فاحذَ التحذير.
    • محدود بالتصميم. الإدخال مُقيَّد بـ 250 000 محرف، وتتوقّف قائمة التطابقات عن النمو بعد بضعة آلاف من المدخلات (لوحة الالتقاط تعرض أول 200)، فلا يمكن للصقٍ عرضي لملفٍّ ضخم أن يجري إلى الأبد بصمت.
    • بلا رحلة ذهاب وإياب. يُعالَج النمط والنصّ في متصفّحك؛ ولا يُرسَل شيء إلى أيّ مكان.

    مثال عملي#

    لنفرض أنّ لديك قائمة أسطر سجلّ وتريد استخراج الفعل والمسار من الأسطر التي تبدأ بفعل HTTP. استخدم النمط:

    (\w+)\s+(/[\w/-]+)

    بالعلمَين gm، واختبره ضدّ:

    GET /api/users
    POST /api/login
    DELETE /api/users/42
    not a log line
    PUT /api/items/3-qty

    تُبرز الأداة السطر الأول والثاني والثالث والخامس (الرابع لا يبدأ بكلمة يليها مسار). تُبلغ قائمة الالتقاط عن كل تطابقة بالفعل والمسار منفصلَين — فـ DELETE هو المجموعة 1 و/api/users/42 هي المجموعة 2، وتتأكّد أنّ مجموعة المسار تُضمِّن القطاع النهائي -qty على السطر الأخير.

    الأسئلة الشائعة#

    أيّ نكهة regex تستخدمها هذه الأداة؟#

    محرّك JavaScript المدمج — الذي يستخدمه String.prototype.match وRegExp.prototype.exec وحقول regex في Node. النمط الذي يعمل هنا سيعمل دون تغيير في كود الواجهة الأمامية أوخادم Node. وهو ليس PCRE أوRE2 أوريجكس Rust؛ فإن نسخت نمطًا من قاعدة كود PHP أوGo، فاختبره هنا قبل الاعتماد عليه.

    تُحذّر الأداة من ReDoS محتمل. ماذا يعني ذلك؟#

    بعض الأنماط يمكن أن يُصرَّ لتشغيل زمن طويل جدًّا على مُدخل معادٍ — المثال الكلاسيكي هو (a+)+b ضدّ سلسلة من a بلا b لاحقة. يستغلّ المهاجمون ذلك لشنّ هجوم حجب خدمة على الخدمات المعتمدة على regex. التحذير قراءةٌ ثابتة لـ شكل نمطك (مُحدِّدات كمية متداخلة، تناوب متداخل)؛ ويُطلق لحظة أن يُنتج نمطٌ كهذا تطابقًا، لا بناءً على مدّة آخر تشغيل. إن رأيته فبسّط النمط: أزِل المُحدِّدات الكمية المتداخلة، أوربطه، أواستخدم المجموعات الذرّية إن كان محرّكك الهدف يدعمها.

    لماذا يطابق نمطي مرّة واحدة فقط؟#

    لأنّك غالبًا لا تضع العلم g. دونه يتوقّف regex الخاصّ بـ JavaScript عند أوّل تطابق. أضِف g لإيجاد كل وجود غير متداخل.

    هل يطابق . الأسطر الجديدة؟#

    لا افتراضيًّا — يطابق . أيّ محرف عدا فاصل السطر. أضِف العلم s (ويُسمّى أحيانًا «dotall») إن أردت أن يمتدّ . عبر الأسطر، وهو مفيد في مطابقة كتل تشمل فواصل أسطر.