أداة اختبار التعبير النمطي
اكتب تعبيرًا نمطيًا، الصق نص اختبار وشاهد التطابقات مُظلَّلة مباشرةً — مع مجموعات الالتقاط والعلامات ورسائل خطأ واضحة.
1,046 مشاهدة
0 تطابق
كيف تعمل الأداة
يصف التعبير النمطي (regular expression) نمطًا من الأحرف بدلًا من سلسلة حرفية، ما يتيح لتعبير قصير واحد مطابقة عائلة كاملة من النصوص: أي عنوان بريد إلكتروني، أي رقم هاتف بعدة صيغ، أي سطر في ملف سجلّ يبدأ بـ"ERROR". اكتب تعبيرًا نمطيًا بصيغة جافاسكريبت، وفعّل علاماته (g جميع التطابقات، i غير حساس لحالة الأحرف، m مرساة متعددة الأسطر، s النقطة تطابق سطرًا جديدًا، u يونيكود كامل)، والصق نصًا نموذجيًا: يُظلَّل كل تطابق في مكانه ويُدرج أسفله مع موضعه وأي مجموعات التقاط. الأقواس () تُنشئ مجموعة التقاط — وهي وسيلة لاستخراج جزء محدد من النص المطابَق، مثل النطاق من عنوان بريد إلكتروني أو السنة من تاريخ، بدلًا من مجرد معرفة أن تطابقًا قد حدث.
هناك تمييز يُربك الجميع تقريبًا في البداية: المُحدِّدات الجشعة مقابل الكسولة. .* جشع — يحاول مطابقة أكبر قدر ممكن من النص، ثم يتراجع فقط عند الحاجة. أمام المدخل <b>bold</b> and <i>italic</i>، يطابق النمط <.*> بشكل جشع من أول < وحتى آخر >، مبتلعًا كلا الوسمين. إضافة ? للحصول على .*? يجعله كسولًا — يطابق أقل قدر ممكن، بحيث يتوقف <.*?> عند أول > ويطابق بشكل صحيح <b> فقط. هذا التمييز هو بالضبط سبب فشل التعبيرات النمطية الساذجة لمطابقة HTML أمام ترميز واقعي.
ما يجب أن تعرفه
المحرك المستخدم هنا هو تنفيذ جافاسكريبت (ECMAScript) الأصلي في متصفحك، لذا فإن النمط الذي يتطابق هنا يتطابق بشكل مطابق تمامًا في كود جافاسكريبت لديك — لا توجد طبقة ترجمة تُشكِّك في ذلك. لهجات التعبيرات النمطية في اللغات الأخرى — PCRE (بي إتش بي)، ودالة re في بايثون، وفئة Pattern في جافا — تشترك في معظم القواعد الأساسية (فئات الأحرف، المُحدِّدات، المجموعات) لكنها تختلف في الميزات المتقدمة: دعم الاستدعاء الخلفي (lookbehind)، وصياغة المجموعات المسمّاة، والمُحدِّدات الحيازية (possessive)، وبعض تسلسلات الهروب. أعد اختبار الحالات الحدّية دائمًا في اللغة المستهدفة الفعلية قبل النشر.
احترس من التراجع الكارثي (catastrophic backtracking): الأنماط ذات المُحدِّدات المتداخلة أو المتراكبة، مثل (a+)+b عند اختبارها أمام سلسلة طويلة من حرف "a" دون حرف "b" في النهاية، يمكن أن تجبر المحرك على تراجع أسّي وتُجمِّد الصفحة — أو خادم الإنتاج لديك، للسبب نفسه. إذا تجمّد نمط ما هنا، اختصر نص الاختبار أولًا، ثم أعد بناء النمط (غالبًا بإزالة التكرار المتداخل كليًا) بدلًا من مجرد إلقاء المزيد من المعالجة عليه. كل شيء يعمل محليًا في متصفحك؛ لا يُرسل أي نمط أو نص إلى أي مكان أبدًا.
الأسئلة الشائعة
ما لهجة التعبير النمطي المستخدمة هنا؟
جافاسكريبت (ECMAScript) — محرك المتصفح الأصلي. تتصرف الأنماط تمامًا كما في كود جافاسكريبت لديك؛ تشترك PCRE وPython في معظم القواعد لكنهما تختلفان في بعض التراكيب المتقدمة.
ماذا تعني العلامات؟
تجد g جميع التطابقات بدلًا من الأول فقط؛ تتجاهل i حالة الأحرف؛ تجعل m الرمزين ^ و$ يطابقان لكل سطر؛ تجعل s النقطة تطابق أسطر السطر الجديد أيضًا؛ تفعّل u معالجة يونيكود الكاملة.
لماذا يُجمِّد نمطي الصفحة؟
بعض الأنماط ذات المُحدِّدات المتداخلة (مثل (a+)+b) قد تُسبب تراجعًا كارثيًا في المدخلات الطويلة. اختصر نص الاختبار أو أعد بناء النمط — نفس التجمّد سيحدث في كود الإنتاج لديك.
ما مجموعة الالتقاط ولماذا هي مهمة؟
وضع جزء من النمط بين قوسين ينشئ مجموعة التقاط، تستخرج تلك السلسلة الفرعية المحدَّدة بمعزل عن التطابق الكامل — فمثلًا (\d{4})-(\d{2})-(\d{2}) عند مطابقته أمام تاريخ يُعطي السنة والشهر واليوم كثلاثة التقاطات منفصلة بدلًا من مجرد تأكيد أن السلسلة بأكملها تبدو كتاريخ. المجموعات غير الملتقِطة، المكتوبة (?:...)، تجمّع لأغراض بنيوية دون إنتاج التقاط إضافي.
لماذا طابق نمطي نصًا أكثر (أو أقل) مما توقعت؟
غالبًا ما يكون السبب خلطًا بين الجشع والكسول. .* والمُحدِّدات المشابهة تلتقط أكبر قدر ممكن افتراضيًا؛ أضف ? (.*?، +?) لجعلها كسولة فتتوقف عند أول نقطة ممكنة بدلًا من آخر نقطة. هذا الحرف الواحد عادة ما يكون الحل عندما يتجاوز تعبير نمطي التطابق المتوقع عبر عدة أسطر أو وسوم.
أدوات مشابهة
الإبلاغ عن مشكلة
أداة اختبار التعبير النمطي
التعليقات
لا توجد تعليقات بعد — كن أول من يكتب تعليقًا!