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

اختبر تعبيرًا نمطيًا على نصّ حقيقي، وانظر كل تطابق مُبرَزًا مع مجموعاته الملتقَطة، واقرأ ما يقوله النمط.

تتم المعالجة على جهازك — بلا رفع

termiva regex '[\w.]+@[\w.]+' --flags g

الراية العامّة مشغّلة دائمًا، فيُوجد كل تطابق لا الأول وحده. وما عداها لك: i تتجاهل حالة الأحرف, m تجعل ^ و $ تطابقان كل سطر, s تدع . تعبر الأسطر الجديدة.

2 تطابقات

Contact ali@example.com or sara@company.org
Invoice INV-2025-0431 dated 2025-01-14
Phone +962 7 9012 3456
Total: 1,240.50 JOD
  • عند 8ali@example.com
  • عند 27sara@company.org

ما يقوله النمط، رمزًا رمزًا:

  • أي واحد من \w. — [\w.]
  • واحد أو أكثر من الشيء الأخير — +
  • أي واحد من \w. — [\w.]
  • واحد أو أكثر من الشيء الأخير — +
تطابقات 2الرايات gلا شيء مرفوع

كيف تختبر تعبيرًا نمطيًا

  1. اكتب نمطك أو الصقه.
  2. الصق النص الذي تتوقّع أن يطابقه، وفعّل أي رايات تحتاجها.
  3. اقرأ التطابقات المُبرَزة ومجموعاتها الملتقَطة.

كيف يعمل

يمرّ النمط عبر محرّك التعابير النمطية في متصفّحك — المحرّك نفسه الذي سيشغّله حين تلصقه في JavaScript. ذلك أهمّ ممّا يبدو: فنكهة كل لغة تختلف في التفاصيل، ونمط تحقّقت منه في PCRE أو بايثون قد يتصرّف تصرّفًا آخر في متصفّح. ما تراه هنا هو ما ستفعله String.replace وRegExp.exec.

تُبرَز التطابقات في مواضعها لا تُسرد وحسب، لأن الإخفاقات المثيرة للاهتمام موضعية. فالنمط الذي يطابق أكثر ممّا ينبغي، أو يطابق عابرًا فاصل سطر لم تتوقّعه، أو يطابق سلسلة فارغة عند كل موضع، يبدو سليمًا في قائمة نتائج ويصير بيّنًا حين ترى أين حطّ.

يعمل حارسان تحت السطح، ووجودهما لسبب بعينه. فالتعبير النمطي شفرة اعتباطية، وبعضها بريء المظهر يستغرق على سلسلة من أربعين حرفًا أطول من عمر الكون — والمثال الكلاسيكي هو علامات التكرار المتداخلة مثل (a+)+b، التي تتراجع تراجعًا كارثيًا. في متصفّح، ليس ذلك خطأً بل تبويبًا متجمّدًا. لذلك تتوقّف المطابقة بعد خمسمئة نتيجة أو ثانية واحدة، أيّهما جاء أولًا، وتقول إنها توقّفت.

الحارس الثاني أصغر ويلتقط شيئًا ينساه كل من يكتب هذا النوع من الحلقات تقريبًا. فالنمط الذي يستطيع مطابقة السلسلة الفارغة — a* على bbb — يطابق عند كل موضع دون أن يتقدّم، فتجلس الحلقة الساذجة على الحرف صفر إلى الأبد. لذلك يُدفع الموضع إلى الأمام حين يكون التطابق فارغًا.

أما القراءة باللغة الواضحة تحت النتائج فسطحية عمدًا. تشرح الرموز التي ينسخها الناس أكثر من غيرها دون أن يفهموها، وتصمت عن الباقي، لأن شرحًا واثقًا خاطئًا لتعبير نمطي أسوأ من لا شرح — فالصعوبة كلها فيها أن الناس يصدّقون ما يظنّون أنها تقوله.

مثال عملي

تحتاج إلى سحب كل عنوان بريد من تصدير دعم فنّي. تبدأ بـ\w+@\w+ فيجد ali@example — فالنقطة في .com ليست حرف كلمة، فيتوقّف التطابق هناك. الإبراز يجعل ذلك مرئيًا فورًا؛ أما قائمة النتائج فكانت ستبدو قصيرة وحسب.

غيّره إلى [\w.]+@[\w.]+ فتضيء العناوين كاملةً. الآن أضف مجموعة التقاط — ([\w.]+)@([\w.]+) — فتسرد كل نتيجة $1 و$2، أي المستخدم والنطاق، وهما ما ستشير إليه في الاستبدال.

ثم جرّب صندوق الاستبدال. ضع فيه $2 فيعود النص كله وقد اختُزل كل عنوان إلى نطاقه. ذلك بالضبط ما ستفعله text.replace(/([\w.]+)@([\w.]+)/g, '$2') في شفرتك، لأنه ما جرى للتوّ.

واحد آخر يستحق التجربة. فعّل m وضع ^ في مقدّمة نمط: يبدأ بالمطابقة عند كل سطر بدل بداية النص كله فقط. تلك الراية وحدها وراء حصّة كبيرة من الأنماط التي تعمل في مختبِر وتخفق على مدخلات حقيقية متعدّدة الأسطر.

أسئلة

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

نكهة JavaScript، لأن محرّك متصفّحك هو من يشغّلها. فإن كنت تكتب بايثون أو PHP أو Go، فمعظم ما تختبره هنا سينتقل معك — لكن النظر إلى الخلف وصياغة المجموعات المسمّاة وبعض هروب خصائص يونيكود تختلف، فتحقّق من أي شيء غير معتاد في اللغة التي تستهدفها.

لماذا الراية العامّة مشغّلة دائمًا؟

بدونها يعيد المحرّك أول تطابق ويتوقّف، وهو ما يجعل المختبِر عديم النفع — إذ لن ترى أبدًا هل يطابق النمط الظهور الثاني مطابقةً صحيحة. كل ما عداها لك أن تشغّله وتطفئه.

ماذا تفعل i وm وs وu فعلًا؟

i تتجاهل حالة الأحرف. m تجعل ^ و$ تطابقان عند كل سطر بدل طرفَي النص كله فقط. s تدع النقطة تطابق الأسطر الجديدة، وهي لا تفعل ذلك بدونها. u تشغّل التعامل الكامل مع يونيكود، وتحتاجها للإيموجي ولهروب الخصائص من نوع \p{...}.

لماذا توقّف قبل أن يجد كل شيء؟

يتوقّف بعد 500 تطابق أو ثانية واحدة. كلا الحدّين موجود كي لا يستطيع نمط يطابق كل موضع، أو نمط يتراجع تراجعًا سيّئًا، أن يجمّد التبويب. حين يتوقّف مبكرًا يقول ذلك بدل أن يقدّم قائمة جزئية على أنها كاملة.

نمطي يعمل هنا ولا يعمل في شفرتي. لماذا؟

السببان المعتادان هما الهروب والرايات. فالنمط المكتوب في حقل سلسلة خام؛ أما النمط نفسه في شفرة مصدرية فيمرّ أولًا بهروب السلاسل في اللغة، فكثيرًا ما يلزم كتابة \d هكذا \\d. الراية التي بدّلتها هنا يجب أن تكون حاضرة هناك أيضًا.

هل يُرسَل نصّي إلى أي مكان؟

لا. يُسلَّم النمط والنص إلى محرّك التعابير النمطية في متصفّحك ولا شيء غير ذلك. الموقع ملفات ساكنة بلا خادم خلفي، فلا وجهة تُرسَل إليها — وهذا يستحق المعرفة، لأن النص الذي يختبر الناس أنماطهم عليه يكون عادةً بيانات إنتاج.

هل مختبِر التعابير النمطية مجاني على الإنترنت؟

نعم — مجاني، بلا حساب، وبلا حد يومي، وبلا علامة مائية. يعمل في متصفّحك عبر الإنترنت، ولأن المعالجة تجري على جهازك فإنه يستمر في العمل دون اتصال بعد تحميل الصفحة.

للقراءة