RevealTheme logo

أداة اختبار التعبيرات النمطية (Regex)

اختبر تعبيرات JavaScript النمطية على أي مُدخَل. شاهد التطابقات والمجموعات والاستبدالات في الوقت الفعلي.

0 تطابق

كيفية استخدام هذه الأداة

  1. 1

    Type your regular expression into the pattern field (no slashes — enter the bare pattern).

  2. 2

    Set the flags in the small field beside it, such as g, i, m, or a combination like gi.

  3. 3

    Paste or type the text you want to search into the large input box below.

  4. 4

    Read the match count and each matched substring with its character index in the results panel; an invalid pattern shows the engine's error message instead.

ما هي التعبيرات النمطية وكيف تُقرأ؟

التعبيرات النمطية (regex) هي لغة صغيرة متخصصة بمجال محدد للبحث عن الأنماط في النص. ولكل لغة برمجة حديثة محرّك regex؛ وتستخدم هذه الأداة RegExp الأصلي في JavaScript، الذي يتبع مواصفة ECMAScript 2018+ ويدعم ميزات حديثة مثل تأكيدات lookbehind، ومجموعات الالتقاط المسمّاة، وهروب خصائص Unicode، والراية dotAll. أما اللبنات الأساسية فهي: الأحرف الحرفية تطابق نفسها (التعبير 'gato' يطابق كلمة gato)؛ وفئات الأحرف تطابق أيًّا من مجموعة ('[a-z]' يطابق الأحرف الصغيرة)؛ والمكمِّمات تتحكم في التكرار (* صفر أو أكثر، + واحد أو أكثر، ? صفر أو واحد، {3,5} بين 3 و5)؛ والمراسي تطابق المواضع (^ بداية السلسلة، $ نهايتها، \b حدّ كلمة)؛ والمجموعات تلتقط التطابقات الجزئية ((gato|perro) يطابق أيًّا منهما، ملتقطًا أيهما تطابق)؛ والتبديل (alternation) يتيح الاختيار. تتألق regex في تحليل النص المنظَّم لكن غير النحوي (السجلات، رسائل البريد، أرقام الهواتف، سمات HTML البسيطة) وتفشل مع البنى التكرارية حقًا (HTML الكامل، JSON المتداخل). ولتلك، استخدم محلّلًا (parser). تتيح لك أداة الاختبار هذه التكرار على نمط مع تغذية راجعة فورية: غيّر التعبير فتُعاد التطابقات حسابها مع كل ضغطة مفتاح.

حالات الاستخدام الشائعة

  • تحقّق من صيغة إدخال المستخدم (البريد الإلكتروني، وأرقام الهاتف، والرموز البريدية) قبل إرسالها إلى خادمك.

  • استخرج بيانات منظَّمة من ملفات السجل (الطوابع الزمنية، وعناوين IP، ورموز الحالة، ومسارات الطلبات).

  • نفّذ البحث والاستبدال عبر مئات الملفات باستخدام بحث التعابير النمطية في محرّرك.

  • اكتب قواعد إعادة كتابة الروابط لـ Nginx أو Apache .htaccess أو عمليات إعادة الكتابة في Vercel.

  • حلّل صيغًا بسيطة شبيهة بـ CSV حيث يكون استخدام محلّل حقيقي مبالغة.

  • ابنِ أنماط التحقّق من النماذج لسمات HTML من نوع <input pattern="...">.

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

ما الرايات (flags) المدعومة؟
g (عامة: تجد كل التطابقات، لا الأول فقط)، وi (دون تمييز بين الأحرف الكبيرة والصغيرة)، وm (متعددة الأسطر: ^ و$ يطابقان فواصل الأسطر)، وs (dotAll: . يطابق فواصل الأسطر)، وu (unicode: معالجة صحيحة للأحرف متعددة البايتات)، وy (sticky: يطابق فقط عند lastIndex). امزج الرايات بدمجها معًا: 'gim' يفعّل العامة + دون تمييز الأحرف + متعددة الأسطر.
كيف أطابق عبر أسطر متعددة؟
حاجتان مختلفتان: 'm' تجعل ^ و$ يطابقان فواصل الأسطر (تتعامل مع كل سطر كسلسلة منفصلة بالنسبة إلى المراسي). و's' تجعل . يطابق فواصل الأسطر (وإلا فإن . يطابق كل شيء عدا فواصل الأسطر). استخدمهما معًا إذا احتجت إلى مطابقة أنماط تمتد عبر الأسطر.
ما الفرق بين المكمِّمات الجشعة والكسولة؟
المكمِّمات الجشعة (*، +، {n,m}) تطابق أكبر قدر ممكن. أما الكسولة (*?، +?، {n,m}?) فتطابق أقل قدر ممكن. والمثال الكلاسيكي: التعبير '<.*>' على '<a><b>' يطابق كامل '<a><b>'؛ بينما '<.*?>' يطابق '<a>' فقط.
متى يجب ألّا أستخدم regex؟
عندما تكون البنية تكرارية حقًا (HTML، JSON، الأقواس المتوازنة). وعندما تحتاج إلى معالجة كل حالة حدّية بشكل صحيح (تحليل التواريخ مع المناطق الزمنية، الأسماء التي تحوي علامة الاقتطاع). وعندما تكون قواعد المُدخَل النحوية محددة جيدًا وتتوفر مكتبة تحليل. تقول إجابة شهيرة على Stack Overflow: regex رائعة في إيجاد الأنماط، وسيئة جدًا في تحليل اللغات.
ما هي مجموعات الالتقاط المسمّاة؟
بدلاً من أن يُعيد (\d{4})-(\d{2})-(\d{2}) مجموعات مرقّمة، استخدم (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) واصل إلى التطابقات عبر match.groups.year. وهذا أيسر صيانةً بكثير في الشيفرة الحقيقية.
لماذا يكون تعبيري النمطي بطيئًا مع مُدخَلات معينة؟
التراجع الكارثي (catastrophic backtracking). يمكن للمكمِّمات المتداخلة مثل (a+)+ أن تستغرق زمنًا أُسّيًا مع مُدخَلات عدائية. تجنّب المكمِّمات المتداخلة والتبديلات المتداخلة. ومحرّك JavaScript ليس له مهلة زمنية، فقد يعلّق تعبير سيئ طلبًا بأكمله. وللإنتاج، استخدم حزمة npm المسماة safe-regex لاكتشاف الأنماط الخطرة.
هل يطابق هذا ما يفعله محرّك regex على خادمي؟
في الغالب: فأبرز نكهات regex (PCRE، وحدة re في Python، وregex في Ruby، وJava) متشابهة لكن بها فروق دقيقة. تختلف صياغة lookbehind، وسلوك فئات الأحرف، ومعالجة Unicode. ولتحقيق التطابق التام في الإنتاج، اختبره أيضًا في اللغة المستهدفة.

أدوات ذات صلة