طريقة استخدام مختبر Regex
- أدخل النمط بين الشرطتين المائلتين، دون
/ المحيطة. - فعّل العلامات مثل
g (كل التطابقات) وi (تجاهل الحالة) وm (متعدد الأسطر). - الصق نص الاختبار. تُميَّز التطابقات على اليسار وتُدرج مع موضعها ومجموعات الالتقاط في الأسفل.
- فعّل استبدال وأدخل نص استبدال مثل
$1 أو $<name> لمعاينة String.replace. - اختر نمطًا من مكتبة الأنماط للبدء من regex مُختبَر للبريد الإلكتروني أو URL أو IP أو التاريخ.
التعبيرات النمطية في JavaScript
يستخدم هذا المختبر محرك RegExp الخاص بمتصفحك، لذا فالنتائج هي تمامًا ما تُرجعه String.match وmatchAll وreplace وRegExp.exec في JavaScript وNode.js. ويشمل ذلك الصياغة الحديثة: المجموعات المسمّاة (?<name>…)، والنظرة الخلفية (?<=…)، وتسلسلات خصائص Unicode مثل \p{L} مع العلامة u، ومؤشرات التطابق مع العلامة d.
ماذا تفعل العلامات
| العلامة | الاسم | التأثير |
g | global | العثور على كل تطابق بدلًا من التوقف عند الأول. |
i | ignoreCase | تتطابق الحروف بغض النظر عن حالتها. |
m | multiline | يطابق ^ و$ بداية كل سطر ونهايته. |
s | dotAll | تطابق . فواصل الأسطر أيضًا. |
u | unicode | معاملة النمط كنقاط ترميز؛ ويُفعّل \p{…} و\u{…}. |
y | sticky | المطابقة فقط عند موضع lastIndex الحالي. |
d | hasIndices | الإبلاغ عن موضعي البداية والنهاية لكل مجموعة التقاط. |
الحماية من التراجع الكارثي
الأنماط ذات المحددات الكمية المتداخلة، مثل (a+)+$ أو (\w|\d)*x، قد تستغرق وقتًا أُسّيًا على مدخلات تكاد تتطابق. في صفحة ويب عادية يؤدي ذلك إلى تجميد علامة التبويب. أما هنا فيعمل كل تطابق في Web Worker في الخلفية يُوقف بعد ثانية واحدة، فتحصل على تحذير واضح بدلًا من متصفح معلّق. النمط نفسه في كود الإنتاج قد يكون ثغرة ReDoS، لذا تعامل مع التحذير كخطأ يجب إصلاحه.
نصائح لكتابة regex أفضل
- ثبّت الأنماط بـ
^ و$ عند التحقق من قيم كاملة، وإلا فإن أي تطابق في أي مكان من السلسلة سيمر.
- فضّل الفئات المحددة مثل
[^"]* على .*؛ فهي أسرع وتتجنب المطابقة الزائدة.
- استخدم المجموعات غير الملتقِطة
(?:…) عندما لا تحتاج إلى القيمة الملتقطة.
- سمِّ مجموعاتك.
match.groups.year أسهل في القراءة من match[1].
الأسئلة الشائعة
ما نكهة regex التي يستخدمها هذا المختبر؟
JavaScript (ECMAScript)، عبر RegExp المدمج في متصفحك. معظم الصياغة مشتركة مع PCRE وPython وJava، لكن ميزات مثل المحددات الكمية التملّكية والمجموعات الذرية والمعدِّلات المضمّنة مثل (?i) غير متوفرة في JavaScript.
لماذا يجد نمطي تطابقًا واحدًا فقط؟
بدون العلامة g (عام)، تتوقف JavaScript بعد التطابق الأول. فعّل g للعثور على كل التكرارات.
كيف أشير إلى المجموعات في نص الاستبدال؟
استخدم $1 و$2… للمجموعات المرقّمة، و$<name> للمجموعات المسمّاة، و$& للتطابق كاملًا، و$$ لعلامة الدولار الحرفية.
لماذا توقف المختبر بسبب انتهاء المهلة؟
استغرق النمط أكثر من ثانية واحدة على مدخلاتك، وهذا يعني دائمًا تقريبًا تراجعًا كارثيًا. ابحث عن المحددات الكمية المتداخلة مثل (x+)+ أو البدائل المتداخلة مثل (a|a)* وأعد كتابتها بحيث يمكن مطابقة كل حرف بطريقة واحدة فقط.
هل تُرسل بيانات الاختبار إلى أي مكان؟
لا. تتم المطابقة محليًا في Web Worker داخل متصفحك. يُحفظ النمط والنص في متصفحك فقط لتجدهما عند عودتك.