Regex101 مقابل أدوات اختبار التعبيرات المنتظمة — مقارنة صريحة
Regex101 هي أداة اختبار التعبيرات المنتظمة التي يلجأ إليها معظم المطورين افتراضياً. إنها سريعة وغنية بالميزات وتدعم ستة أنواع من التعبيرات المنتظمة ولديها لوحة شرح تفصيلية تُعلِّمك ما يفعله كل جزء من النمط. لمعظم حالات الاستخدام تستحق سمعتها كمعيار ذهبي.
لكنها ليست الخيار الوحيد، وليست الخيار الأنسب لكل موقف. إنها ترسل سلاسل الاختبار إلى خادم. تفترض PCRE لا JavaScript. واجهتها كثيفة بما يكفي لإرباك المبتدئين. وإذا احتجت فحصاً سريعاً دون فتح تبويب آخر، أو إن كنت تهتم بإبقاء السلاسل الحساسة بعيدة عن الخوادم الخارجية، فالبدائل تستحق المعرفة.
تغطي هذه المقارنة Regex101 وToova Regex Tester وRegExr وRegexPal وiHateRegex وDebugex — ما تُتقنه كل منها وأين تقصر وكيف تختار بناءً على سير عملك الفعلي. للاختبار الفوري، تعمل أداة Toova Regex Tester كلياً في متصفحك. لمقارنة كتل النص بعد تطبيق استبدال، تُظهر مقارنة النصوص بالضبط ما تغيَّر. للتحقق من تنسيق مخرجات التعبيرات المنتظمة، يُصيِّر معاينة Markdown النتيجة بصرياً.
Regex101 — المعيار الذهبي
بنى فراس ضيب Regex101 وأصدرها عام 2012. أصبحت المعيار الفعلي لتطوير التعبيرات المنتظمة إلكترونياً، وبحق. مجموعة الميزات لا مثيل لها بين الأدوات المجانية:
- ستة أنواع من التعبيرات المنتظمة: PCRE وPCRE2 وECMAScript (JavaScript) وPython وGolang وJava. تختارها من القائمة المنسدلة في أعلى اليسار.
- شرح فوري: أثناء كتابة تعبيرك المنتظم، تشرح لوحة تفصيلية على اليمين كل رمز — المحددات الكمية وفئات الحروف والمراسي ومجموعات الالتقاط — بلغة سهلة مع إبراز الموضع بدقة في النمط.
- تفصيل المطابقات: كل مطابقة مُلوَّنة وقابلة للنقر. مجموعات الالتقاط تُعرَض بشكل منفصل مع أرقام المجموعات وتسميات المجموعات المُسمَّاة.
- وضع الاستبدال: اكتب سلسلة استبدال وشاهد نتيجة الاستبدال مباشرةً مع دعم المراجع الخلفية.
- وضع اختبارات الوحدة: حدِّد المطابقات وغير المطابقات المتوقعة، ثم تحقَّق منها مقابل تعبيرك. مفيد عندما يحتاج النمط إلى تلبية عدة متطلبات في آنٍ واحد.
- المكتبة والرابط الدائم: احفظ تعبيرك على رابط دائم وشاركه. تحتوي المكتبة أيضاً على آلاف الأنماط التي ساهم بها المجتمع مع شروح.
- المُصحِّح: تتبَّع خطوة بخطوة كيف يعالج المحرك سلسلة الاختبار حرفاً بحرف بما في ذلك التراجع. لا قيمة تُضاهيه عند تشخيص التراجع الكارثي.
قيود Regex101
الواجهة كثيفة. المستخدم لأول مرة يواجه تصميماً بثلاثة ألواح مع قوائم منسدلة ومربعات تحديد للأعلام ولوحة معلومات المطابقة والشريط الجانبي للشرح في آنٍ واحد. لحالات الاستخدام البسيطة، هذا مبالغة والضجيج المرئي يُبطِّئك.
تعالج Regex101 سلسلة اختبارك على خوادمها. ميزة المكتبة تحفظ الأنماط علناً افتراضياً — أي تعبير تلصقه وتشاركه مرئي لأي شخص يمتلك الرابط. هذا عادةً لا بأس به للأنماط غير الحساسة، لكن كن حذراً عندما تحتوي سلاسل اختبارك بيانات مستخدمين حقيقية أو معرِّفات نظام داخلية أو تنسيقات خاصة.
النوع الافتراضي هو PCRE لا JavaScript. يجب على المطورين الذين يختبرون تعبيرات JS أن يتذكروا التبديل — وإن نسوا قد يُصحِّحون نمطاً يعمل في PCRE لكن يفشل في JavaScript الإنتاجية (أو العكس). مجموعات الالتقاط المُسمَّاة هي الفخ الأكثر شيوعاً: PCRE يستخدم (?P<name>...) بينما ECMAScript يستخدم (?<name>...).
Toova Regex Tester — أولوية الخصوصية ومحرك JS الأصيل
تتبع أداة Toova Regex Tester نهجاً مختلفاً: من جانب العميل فقط، محرك JavaScript، صفر رحلات إلى الخادم. يُعالَج تعبيرك المنتظم وسلاسل الاختبار في متصفحك باستخدام المحرك ذاته المستخدم في Node.js والمتصفحات الحديثة. ما تراه هو بالضبط ما سيفعله كود JavaScript الإنتاجي — لا ترجمة بين الأنواع مطلوبة.
- الخصوصية: لا شيء يغادر متصفحك. مناسبة للاختبار بسلاسل حساسة.
- مطابقة JavaScript: تستخدم محرك JavaScript الأصيل، مُزيلةً الارتباك بين PCRE وECMAScript.
- الأعلام: تدعم جميع أعلام JS القياسية — global وcase-insensitive وmultiline وdotAll وunicode وsticky.
- إبراز المطابقات: المطابقات ومجموعات الالتقاط مُبرَزة مباشرةً في سلسلة الاختبار.
- 16 لغة: الواجهة مُترجَمة للفرق الدولية.
المقايضات: Toova لا تدعم أنواع PCRE أو Python أو Go — JavaScript فقط. لا يوجد مُصحِّح خطوة بخطوة، لا وضع اختبارات الوحدة، لا مكتبة مجتمعية. للتطوير بـ JS الخالص، هذه الإغفالات نادراً ما تكون مشكلة. للعمل بتعبيرات منتظمة عبر لغات أو التصحيح العميق للتراجع الكارثي، Regex101 لا تزال الأداة الأفضل.
RegExr — خيار المعلِّم
بُنيت RegExr تحديداً مع التعلُّم في الاعتبار. تحتوي مكتبتها المجتمعية مئات الأنماط مع شروح مكتوبة بشرياً — لا فقط ما يفعله النمط، بل لماذا هو مُهيكَل هكذا وما الحالات الحافة التي يجب مراقبتها. هذا يجعلها مرجعاً ممتازاً عندما لا تختبر نمطاً فحسب بل تحاول فهم بنية جديدة.
تعرض لوحة الشرح تفصيلات رمز بعد رمز مشابهة لـ Regex101 لكن بتصميم مرئي أنظف أسهل قراءةً للمبتدئين. الواجهة أقل كثافة بشكل عام.
RegExr تدعم نوعَيْ JavaScript وPCRE. تعالج البيانات من جانب العميل للمطابقة، لكن أنماط المكتبة مُخزَّنة من جانب الخادم. إنها ليست بتكامل Regex101 (لا مُصحِّح خطوة بخطوة، لا اختبارات وحدة، أنواع أقل)، لكن للعمل اليومي بتعبيرات JavaScript المنتظمة وللتعلُّم، إنها بديل قوي.
RegexPal — بسيطة وسريعة
RegexPal أداة اختبار تعبيرات JavaScript المنتظمة المجرَّدة. لا حسابات ولا معالجة خادم ولا مكتبة ولا لوحة شرح. تلصق تعبيراً وسلسلة اختبار وتُبرَز المطابقات فوراً. لا شيء آخر.
هذا البساطة هو قوتها: الصفحة تُحمَّل في أقل من ثانية، لا احتكاك للحصول على نتيجة، والتركيز على JavaScript فقط يعني لا ارتباك في الأنواع. هي الأداة التي تستخدمها عندما تحتاج إجابة سريعة ولا تريد التفكير في خيارات الواجهة.
الضعف: لا شرح ولا وضع استبدال ولا عرض المجموعات المُسمَّاة ولا تصحيح. إذا لم يعمل تعبيرك المنتظم، لا تخبرك RegexPal بأي شيء عن السبب.
iHateRegex — لاكتشاف الأنماط
تتبع iHateRegex نهجاً مختلفاً كلياً: إنها مكتبة منتقاة من أنماط التعبيرات المنتظمة الجاهزة للإنتاج للمهام الشائعة. التحقق من البريد الإلكتروني ومطابقة URL وأرقام الهاتف وعناوين IP وتنسيقات بطاقات الائتمان والألوان السداسية عشرية والتواريخ — كل نمط يأتي بشرح عما يغطيه وما يستثنيه عمداً.
إنها ليست أداة اختبار بالدرجة الأولى. تذهب إلى iHateRegex عندما تحتاج نمطاً معروفاً الجودة لمشكلة شائعة بدلاً من بناء نمط مخصص من الصفر. الأنماط مُحقَّقة من المجتمع والحالات الحافة موثَّقة، وهو ما كثيراً ما يكون أكثر قيمة من بناء نمطك الخاص.
يوجد مختبر أساسي في صفحة كل نمط يسمح لك بالتحقق من النمط مقابل سلاسلك الخاصة قبل نسخه. التنفيذ من جانب العميل.
Debuggex — المُفسِّر المرئي
يُصيِّر Debuggex تعبيرك المنتظم كمخطط قضبان السكك — مخطط انسيابي يوضح المسارات الممكنة عبر النمط. كل بديل (a|b) ومجموعة اختيارية ((...)?) ومحدد كمي (+ و* و{n,m}) يصبح فرعاً أو حلقة مرئية في المخطط.
هذا التمثيل المرئي يجعل بعض الأنماط واضحة فوراً يصعب التفكير فيها بشكلها النصي الخطي. نمط كـ (a|ab)*c — المشهور بإحداث التراجع الكارثي — يُظهر بنيته المتفرعة الأسية في المخطط بطريقة لا يُظهرها التمثيل الخطي.
Debuggex ليست أداة سرعة. بناء النمط والتكرار عليه أبطأ منه في الأدوات النصية. لكن لفهم لماذا يتصرف النمط بشكل غير متوقع، أو لشرح تعبير منتظم معقد لزميل لا يعرف الصيغة، المخرج المرئي مفيد فعلاً. تدعم JavaScript وPCRE وPython.
مرجع الأنواع — الفروق الرئيسية
أهم ما يجب فهمه عن أنواع التعبيرات المنتظمة أن نمطاً يعمل في أحدها قد يفشل بصمت أو يتصرف بشكل مختلف في آخر. هذه هي حالات الفخ الأكثر شيوعاً:
مجموعات الالتقاط المُسمَّاة
PCRE يستخدم (?P<name>...). ECMAScript (JavaScript) يستخدم (?<name>...). Python يقبل كليهما. Go يستخدم (?P<name>...) كـ PCRE.
(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2}) صيغة PCRE أعلاه ستُسبِّب SyntaxError في JavaScript. الصيغة الصحيحة لـ ECMAScript:
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) إذا كنت تنسخ نمطاً من درس PHP إلى كود JavaScript، ستنكسر المجموعات المُسمَّاة. تحقَّق دائماً من النوع.
تأكيدات النظر خلف (Lookbehind)
يدعم PCRE النظر خلف بطول متغير منذ عقود. أضاف JavaScript (ECMAScript 2018) دعم النظر خلف، لكن في المحركات الحديثة فقط — Node.js 10 أو أحدث، Chrome 62 أو أحدث. أوقات تشغيل JavaScript القديمة ترفض أي نمط نظر خلف بـ SyntaxError.
(?<=\$)\d+(\.\d{2})? هذا النمط يعمل بشكل متطابق في PCRE وJavaScript الحديثة، لكن سيفشل في البيئات التي تستهدف ES5. اختبر بالنوع المناسب لبيئة التشغيل المستهدفة.
المجموعات الذرية والمحددات الامتلاكية
يدعم PCRE المجموعات الذرية ((?>...)) والمحددات الكمية الامتلاكية (++ و*+ و?+) التي تمنع التراجع وتُزيل بعض حالات التراجع الكارثي. ECMAScript لا يدعم أياً منهما. إذا رأيت هذه في نمط، فهو خاص بـ PCRE ويجب إعادة كتابته لـ JavaScript.
مقارنة الميزات
| الأداة | الخصوصية | نوع JS | PCRE | الشرح | الاستبدال | المُصحِّح | المكتبة |
|---|---|---|---|---|---|---|---|
| Toova | من جانب العميل | نعم | لا | أساسي | نعم | لا | لا |
| Regex101 | خادم | نعم | نعم | تفصيلي | نعم | نعم | نعم |
| RegExr | من جانب العميل | نعم | نعم | جيد | لا | لا | مجتمع |
| RegexPal | من جانب العميل | نعم | لا | لا يوجد | لا | لا | لا |
| iHateRegex | من جانب العميل | نعم | لا | توثيق الأنماط | لا | لا | منتقاة |
| Debuggex | خادم | نعم | نعم | مخطط مرئي | لا | لا | لا |
مشكلة التعبير المنتظم للبريد الإلكتروني — دراسة حالة
لا تكتمل أي مقارنة للتعبيرات المنتظمة دون التطرق إلى التحقق من البريد الإلكتروني. الأنماط المستخدمة عبر هذه الأدوات توضح لماذا اختيار الأداة الصحيحة مهم.
^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$
هذا النمط هو المحقِّق "البسيط" الأكثر شيوعاً للبريد الإلكتروني. يغطي غالبية عناوين البريد الإلكتروني الواقعية لكن يرفض تقنياً صالحة كـ "user name"@example.com (الأجزاء المحلية المقتبسة — لن تجتاز) والعناوين ذات النطاقات غير ASCII.
الجوهر ليس أي أداة تستخدم لهذا النمط — جميعها تتعامل معه. الجوهر أن فهم ما يقبله النمط ويرفضه يتطلب لوحة شرح (Regex101 وRegExr) أو توثيقاً منتقى (iHateRegex). أداة تعرض فقط المطابقات المُبرَزة بدون سياق — RegexPal أو العرض الأساسي لـ Toova — تخبرك أن النمط طابق، لكن لا تخبرك إن كان طابق الأشياء الصحيحة.
مرجع MDN على التعبيرات المنتظمة في JavaScript هو المصدر الموثوق لصيغة تعبيرات ECMAScript المنتظمة ويغطي الفروق بين JS وPCRE بالتفصيل.
اعتبارات الخصوصية
الآثار الخصوصية لأدوات اختبار التعبيرات المنتظمة كثيراً ما تُغفَل. سلسلة اختبارك ليست مجرد عينة عشوائية — فهي كثيراً ما تكون:
- سطر سجل حقيقي من الإنتاج يحتوي أسماء مضيفات داخلية أو معرِّفات مستخدمين أو معاملات طلبات
- قيمة مُقدَّمة من مستخدم تحاول التحقق منها — ربما عنوان بريد إلكتروني أو رقم هاتف أو معرِّف
- تنسيق بيانات داخلي يكشف بنية نظامك
- نمط خاص لا تريد فهرسته أو ربطه بنطاقك علناً
الأدوات من جانب الخادم (Regex101 وDebugex) ترسل هذه البيانات إلى خادم بعيد. قد تجعل ميزة مكتبة Regex101 أيضاً نمطك وسلسلة اختبارك قابلَيْن للاكتشاف عن غير قصد إذا شاركت رابطاً دائماً دون أن تدرك أنه عام افتراضياً.
الأدوات من جانب العميل (Toova وRegExr للمطابقة وRegexPal وiHateRegex) تحتفظ بجميع المعالجة محلياً. لعمل التطوير باستخدام بيانات عينة، المعالجة من جانب الخادم عادةً مناسبة. لتصحيح الأخطاء الإنتاجي بيانات حقيقية، استخدم أداة من جانب العميل.
متى تستخدم أي أداة
استخدم Regex101 عندما:
- تحتاج دعم أنواع PCRE أو Python أو Go أو Java إلى جانب JavaScript.
- تُصحِّح نمطاً معقداً وتحتاج المُصحِّح خطوة بخطوة لتتبع التراجع.
- تريد تعريف اختبارات وحدة للتعبير المنتظم للتحقق من حالات متعددة في آنٍ واحد.
- تحتاج مشاركة نمط مع زميل برابط دائم وشرح.
- لا تحتوي سلسلة اختبارك بيانات حساسة.
استخدم Toova Regex Tester عندما:
- بيئتك المستهدفة JavaScript (متصفح أو Node.js) وتريد تطابقاً دقيقاً.
- تحتوي سلاسل اختبارك بيانات حساسة أو خاصة أو خاصة بشركتك.
- تحتاج واجهة سريعة بلا تشتيت للتكرار دون تبديل أوضاع.
- تعمل في فريق متعدد اللغات وتريد واجهة مُترجَمة.
استخدم RegExr عندما:
- تتعلم التعبيرات المنتظمة وتريد شروحاً واضحة جانب المطابقة.
- تريد تصفح مكتبة مجتمعية من الأنماط المُحقَّقة للمشكلات الشائعة.
- تحتاج خصوصية من جانب العميل مع لوحة شرح أفضل من RegexPal.
استخدم iHateRegex عندما:
- تحتاج نمطاً معروف الجودة لمهمة شائعة — بريد إلكتروني أو URL أو هاتف أو IP — بدلاً من بناء نمط من الصفر.
- تريد الحالات الحافة والاستثناءات الموثَّقة لنمط قبل استخدامه في الإنتاج.
استخدم Debuggex عندما:
- تحتاج فهم لماذا يتصرف نمط معقد بشكل غير متوقع — خاصةً مع التبديل والتراجع.
- تشرح تعبيراً منتظماً لشخص لا يعرف الصيغة.
- توثِّق نمطاً وتريد تضمين مخطط قضبان السكك المرئي.
استخدم RegexPal عندما:
- تريد أسرع نتيجة ممكنة بصفر عبء واجهة.
- تختبر نمطاً بسيطاً ولا تحتاج شرحاً أو استبدالاً.
الخلاصة
Regex101 تستحق سمعتها. لدعم الأنواع المتعددة والتصحيح العميق وأنماط المجتمع، لا شيء يُضاهيها بين الأدوات المجانية. لكن لتطوير JavaScript اليومي وإبقاء السلاسل الحساسة بعيدة عن الخوادم الخارجية وتجنب فخ PCRE الافتراضي، أداة من جانب العميل أصيلة لـ JavaScript هي نقطة البداية الصحيحة.
التوصية العملية لمعظم مطوِّري JavaScript: ضع إشارة مرجعية على Toova Regex Tester للعمل الروتيني والاختبار الحساس للخصوصية، وافتح Regex101 عندما تحتاج المُصحِّح خطوة بخطوة أو دعم أنواع متعددة. إنهما يُكمِّلان بعضهما لا يتنافسان.
لأنماط التعبيرات المنتظمة التي تُحوِّل النصوص، تُساعدك أداة مقارنة النصوص على التحقق من أن الاستبدالات غيَّرت بالضبط ما أردت ولا شيء غيره. ولاختبار أن مخرجات التعبيرات المنتظمة تُصيَّر بشكل صحيح عندما تتضمن Markdown أو HTML، يمنحك معاينة Markdown فحصاً مرئياً فورياً.