كل الأدوات تعمل داخل متصفحك — ملفاتك لا تغادر جهازك أبدًا.
All tools154

المطورون

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

اختبر الأنماط مباشرة مع تمييز المطابقات وجدول المجموعات.

ما الذي تفعله. أداة اختبار التعبيرات النمطية تجرّب النمط على نص تجريبي وتميّز المطابقات أثناء الكتابة. وتعرض هذه الأداة مجموعات الالتقاط في جدول، ويمكنها معاينة الاستبدال. وهي تستخدم محرّك متصفحك، فسلوكها مطابق لسلوك JavaScript.
يعمل في متصفحكلا يتم رفع أي شيءبدون تسجيليعمل دون اتصال

كيفية الاستخدام اختبار التعبيرات النمطية

  1. أدخل النمط واضبط الرايات — g للمطابقة الشاملة وi لتجاهل حالة الأحرف وm لتعدّد الأسطر.
  2. الصق النص التجريبي أسفله. تُميَّز المطابقات في الحقلين أثناء الكتابة.
  3. اقرأ جدول مجموعات الالتقاط، أو انتقل إلى وضع الاستبدال للمعاينة.

لماذا لا يطابق نمطي أي كلمة عربية؟

هذه أكثر مفاجأة تواجه من يكتب تعبيرًا نمطيًا لنص عربي، وهي صامتة تمامًا: النمط لا يخطئ، بل لا يطابق شيئًا.

الفئة \w تعني في JavaScript افتراضيًا [A-Za-z0-9_] فقط. فالنمط ^\w+$ يطابق "Ahmed" ولا يطابق «أحمد» — ولا أي كلمة عربية على الإطلاق. والفئة [a-z] كذلك.

وهذا أشدّ أثرًا في العربية منه في لغات أخرى تكتب بالحروف اللاتينية: هناك يطابق النمط أغلب الكلمات ويخفق في المشكولة منها فقط، وهنا يخفق في كل شيء.

والحل هو راية u مع فئات خصائص Unicode: \p{L} لأي حرف في أي كتابة، و\p{Arabic} للحروف العربية تحديدًا.

فالنمط /^\p{L}+$/u يطابق «أحمد» و«Müller» و«田中» جميعًا. وهو الخيار الصحيح لكل ما يتعامل مع أسماء حقيقية.

التشكيل والمحارف غير المرئية داخل النمط

العربية تضيف مشكلتين لا وجود لهما في النص اللاتيني، وكلتاهما تكسر المطابقة دون أثر مرئي.

الأولى التشكيل. الحركات نقاط ترميز مستقلة تقع ضمن الفئة \p{Mn} أي العلامات غير المتباعدة. فالنمط الذي يطابق «كتب» لا يطابق «كَتَبَ»، لأن بين الحروف محارف إضافية. ولمطابقة النصين معًا إما أن تُزال الحركات قبل المطابقة، أو يُسمح بها في النمط: ك\p{Mn}*ت\p{Mn}*ب — وهو حل صحيح وبشع، والأول أفضل.

والثانية علامتا الاتجاه U+200F وU+200E. يضيفهما المحرّر تلقائيًا عند خلط العربية باللاتينية، وتنتقلان مع النسخ. فسلسلة تبدو مطابقة للنمط لا تطابقه، دون أي فرق مرئي.

والعادة العملية: نظّف النص قبل تطبيق التعبير النمطي عليه. أداة تنظيف النص تزيل التشكيل والمحارف غير المرئية وتوحّد صور الألف والياء — وهذه الخطوات الثلاث تحلّ أغلب حالات الإخفاق.

ماذا تفعل الرايات؟

الرايات تغيّر السلوك جذريًا، وكثيرًا ما تُخلط.

ماذا تفعل الرايات؟
الرايةالأثر
gيجد كل المطابقات لا الأولى فقط
iيتجاهل حالة الأحرف — لا أثر له على العربية
m^ و$ تعملان على كل سطر بدل النص كاملًا
sالنقطة تطابق فواصل الأسطر أيضًا
uوضع Unicode، ولا غنى عنه لـ \p{...} وللعربية
yيبحث من الموضع الحالي بالضبط

الراية i لا تفعل شيئًا مع النص العربي، لأن الأبجدية أحادية الحالة. وهذا لا يعني تركها في الأنماط المختلطة — فهي ما زالت تعمل على الجزء اللاتيني منها.

وسوء الفهم الشائع بين m وs: الأولى تغيّر موضع عمل ^ و$ فقط، ولا تغيّر ما تطابقه النقطة. ومن أراد المطابقة عبر الأسطر يحتاج s.

الجشع والتراجع الكارثي

المحدِّدات جشعة افتراضيًا: .* يأخذ أكبر قدر ممكن ثم يتراجع بالقدر اللازم. وبإضافة علامة استفهام يصبح كسولًا فيأخذ أقل قدر ممكن.

وفي النص <b>غامق</b> و<b>ثخين</b> يطابق <b>.*</b> كل شيء من أول وسم إلى آخره. أما <b>.*?</b> فيطابق المقطعين منفصلين.

والخطر في المحدِّدات المتداخلة مثل (a+)+b: مع مدخل غير مطابق يجرّب المحرّك عددًا أُسّيًا من التقسيمات، فيستغرق ذلك دقائق مع ثلاثين محرفًا ويجمّد الصفحة. ومن يبني أنماطًا من مدخلات المستخدمين يفتح بذلك ثغرة حقيقية.

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

لماذا لا يطابق نمطي الكلمات العربية؟

لأن \w و[a-z] تغطّيان ASCII فقط. استخدم الراية u مع \p{L} أو \p{Arabic}.

كيف أطابق نصًا مشكّلًا وغير مشكّل معًا؟

الأفضل إزالة التشكيل قبل المطابقة. البديل السماح بـ \p{Mn}* بين الحروف، وهو صحيح وصعب القراءة.

هل تفيد الراية i مع العربية؟

لا. الأبجدية العربية أحادية الحالة. لكنها تبقى مفيدة في الأنماط المختلطة.

ما الفرق بين m وs؟

m تجعل ^ و$ تعملان على كل سطر. وs تجعل النقطة تطابق فواصل الأسطر. أمران مختلفان.

لماذا تجمّد الصفحة عند نمط معيّن؟

غالبًا تراجع كارثي بسبب محدِّدات متداخلة مثل (a+)+. بسّط النمط.

هل يُرفع نصّي؟

لا. كل شيء يجري داخل هذه الصفحة.

أدلة حول اختبار التعبيرات النمطية