لقد فقدت معظم فترة ما بعد الظهر مرة واحدة بسبب محدد كمي جشع واحد. كنت أكتب خريطة إعادة توجيه لترحيل WordPress - بضع مئات من عناوين URL القديمة التي تحتاج إلى إعادة الكتابة إلى عناصر أساسية جديدة - وكان لدي regex مفترض لالتقاط البزاقة الزائدة من كل مسار. لقد عملت على عناوين URL الثلاثة التي اختبرتها في رأسي. لم يعمل على الرابع، الذي كان يحتوي على جزأين من المسار، لأنه .* لقد ابتلعت الشرطة المائلة الأولى وكل شيء بعدها بمرح. أعادت القاعدة توجيه نصف الموقع بصمت إلى المكان الخطأ، واكتشفت ذلك من القارئ، وليس من اختباري، لأن "؛ الاختبار والاقتباس؛ كان يحدق في النمط ويثق به.
هذه هي المشكلة الأساسية في التعبيرات العادية: فهي قابلة للكتابة فقط حتى تقوم بتشغيلها ضد شيء ما. يُقرأ النمط على أنه معقول حتى اللحظة التي يثبت فيها الإدخال الحقيقي خطأه، وتكون أوضاع الفشل هادئة. إن التعبير العادي الذي لا يطابق شيئًا لا يلقي أي خطأ. التعبير العادي الذي يطابق الكثير لا يلقي أي خطأ. يقوم التعبير العادي الذي يحتوي على مجموعة التقاط خاطئة بمهارة بتسليمك سلسلة فرعية خاطئة ويتحرك. الطريقة الوحيدة لمعرفة النمط تفعل ما تعتقد أنه هو إطعامه النص الفوضوي المليء بحالات الحافة الذي سيراه بالفعل و ينظر على ما يمسك.
أ اختبار ريجكس يغلق هذه الفجوة. تضع النمط الخاص بك في مربع واحد، ونموذج النص الخاص بك في مربع آخر، وتضيء كل مباراة في مكانها - مع كسر مجموعات الالتقاط حتى تتمكن من رؤية شريحة السلسلة التي هبطت في المجموعة 1 مقابل المجموعة 2 بالضبط. الشريحة التي قمت بإنشائها لـ Toolz.dev تعمل على المتصفح '؛s الأصلي RegExp المحرك، وهو نفس المحرك الذي يستخدمه كود JavaScript وTypeScript، لذا فإن ما تراه في جهاز الاختبار هو ما تحصل عليه في الإنتاج. لا يوجد تقريب، لا "؛ قريب بما فيه الكفاية."؛
يغطي هذا الدليل كيفية استخدام جهاز الاختبار لتصحيح أخطاء الأنماط بسرعة، وما تفعله كل علامة فعليًا، وكيفية ظهور مجموعات الالتقاط والمجموعات المسماة في الإخراج، والمحادثات الخاصة بجافا سكريبت التي تعثر الأشخاص القادمين من Python أو PCRE.
ليرة تركية؛DR: لصق النمط الخاص بك في Toolz.dev اختبار Regex (لا حاجة إلى خطوط مائلة)، قم بتبديل علامات g/i/m/s/u/y، وقم بإسقاط نص الاختبار أدناه. يتم تمييز المطابقات مباشرة بألوان متناوبة، ويتم إدراج كل مجموعة التقاط مرقمة ومسماة في كل مباراة، وتظهر أخطاء بناء الجملة الرسالة الدقيقة للمحرك '؛s. يستخدم محرك JavaScript RegExp الحقيقي، ويعمل بنسبة 100% من جانب العميل، لذا لا يتم تحميل السجلات الحساسة مطلقًا، ويتزاوج مع regex builder لتجميع الأنماط من الصفر.
كيف يمكنك اختبار Regex دون تشغيل برنامجك بالكامل؟
الطريقة البطيئة لتصحيح أخطاء regex هي الحلقة التي يبدأ بها معظمنا: قم بتحرير النمط الموجود في التعليمات البرمجية الخاصة بك، وتشغيل البرنامج، وقراءة المخرجات، وتخمين الخطأ الذي حدث، والتكرار. كل تكرار يكلف تشغيل البرنامج بالكامل، والتعليقات غير مباشرة - كما ترى نتيجة من المباراة، وليس المباراة نفسها.
يقوم أحد المختبرين بطي هذه الحلقة إلى لا شيء. تقوم بلصق النمط، ولصق نص تمثيلي، ورؤية التطابقات على الفور. عندما تقوم بتغيير حرف واحد في النمط، يتم تحديث النقاط البارزة. يؤدي هذا إلى تشديد التعليقات إلى النقطة التي يمكنك الوصول إليها يستكشف- حاول أ + حيث كان لديك *أضف حدودًا للكلمة، واجعل المجموعة غير قابلة للاستيلاء - وشاهد تأثير الأرض في الوقت الفعلي بدلاً من تخيله.
الانضباط الرئيسي هو استخدام حقيقي نص الاختبار، وليس المثال النظيف في رأسك. يحتوي عنوان URL الذي كسر خريطة إعادة التوجيه الخاصة بي على جزأين من المسار؛ كانت حالة الاختبار العقلي الخاصة بي تحتوي على واحد. إذا قمت بلصق القائمة الفعلية لعناوين URL القديمة في جهاز اختبار، لكان من الممكن أن تكون المطابقة الجشعة خاطئة بشكل واضح في السطر الرابع. احصل على خطوط السجل الفعلية، ومدخلات المستخدم الفعلية، ومسارات الملفات الفعلية - بما في ذلك المسارات القبيحة - ودع جهاز الاختبار يوضح لك أين ينهار النمط قبل أن يفعل المستخدمون.
ما الذي تتغيره أعلام Regex فعليًا؟
تقوم الأعلام بتعديل كيفية تطبيق النمط بأكمله، وسوء فهمها يكمن وراء حصة كبيرة من "؛ لماذا لا '؛ في هذا العمل والاقتباس؛ لحظات. ال اختبار يعرض جميع علامات JavaScript الستة للتبديل حتى تتمكن من قلب واحدة ومشاهدة تحول النتيجة.
ز - عالمي. بدونها، تتوقف المطابقة عند الضربة الأولى. باستخدامه، يجد المحرك كل تطابق في النص. في جهاز الاختبار، يتم تشغيل global افتراضيًا لأنك تريد دائمًا رؤية جميع التطابقات؛ قم بإيقاف تشغيله لتأكيد شكل مكالمة مباراة واحدة String.match بدون g سيعود.
أنا - تجاهل القضية. يجعل النمط بأكمله غير حساس لحالة الأحرف، لذلك error مباريات Error و ERROR. بشكل مباشر، والعلم الأكثر استخدامًا بعد g.
م - متعدد الخطوط. هذا واحد يساء فهمه على نطاق واسع. يفعل لا يصنع . فواصل الأسطر. يغير ماذا ^ و $ مرساة ل: مع m، فهي تتطابق في بداية ونهاية كل منها خط، وليس فقط بداية ونهاية السلسلة بأكملها. إذا كنت '؛ إذا كنت تقوم بمطابقة سطر بسطر في السجل، فأنت تريد ذلك.
س - دوتال. هذا هو العلم الذي يصنع . مطابقة أحرف السطر الجديد. بدونها، . يطابق أي حرف إلا فاصل الأسطر، ولهذا السبب غالبًا ما يتوقف النمط الذي يهدف إلى تمديد خطوط متعددة بهدوء عند الخط الأول. إذا كان يجب أن تتجاوز المباراة حدود الخطوط، s هو ما تحتاجه - لا m.
ش - يونيكود. تمكين وضع Unicode الكامل، مما يجعل \u{...} يهرب من العمل، ويعامل الأزواج البديلة كنقاط رمز مفردة، ويجعل فئات الأحرف مثل \p{Letter} متاح. مهم عندما يحتوي النص الخاص بك على رموز تعبيرية أو نصوص غير لاتينية.
ص - لزجة. يثبت كل مباراة محاولة إلى الموضع الدقيق lastIndex، لذا فإن المطابقة لا تنجح إلا إذا بدأت بدقة هناك. It'؛s علامة متخصصة تستخدم في الرموز المميزة والمحللين؛ معظم الأعمال اليومية لا تمسها أبدًا.
الارتباك الذي يكلف معظم الوقت هو m مقابل s. يصل الأشخاص إلى الخطوط المتعددة عندما يقصدون dotAll. إذا كانت نقطتك '؛ خطوط العبور، فأنت بحاجة s. إذا كانت مراسيك '؛t تصل إلى حدود الخط، فأنت بحاجة m. إنها تحل مشاكل مختلفة وغالبًا ما يتم استخدامها معًا.
كيف يتم عرض مجموعات الالتقاط في الإخراج؟
تقوم الأقواس في النمط بوظيفتين: فهي تجمع الأنماط الفرعية لمحددات الكمية أو التناوب، وهي يلتقط الشريحة المتطابقة للاستخراج. عندما تستخدم '؛re re regex لسحب البيانات من النص - تاريخ '؛ سنة وشهر، سطر سجل و#39؛s الطابع الزمني والمستوى - مجموعات الالتقاط هي النقطة بأكملها، والحصول عليها بشكل خاطئ هو المصدر الأكثر شيوعًا لـ "؛ النمط يتطابق ولكني حصلت على السلسلة الخاطئة."؛
ال اختبار يسرد كل تطابق مع مجموعات الالتقاط الخاصة به المنفصلة تحته. المجموعة 1 هي النمط الفرعي الأول بين قوسين، والمجموعة 2 هي الثانية، وهكذا، كل منها موضح بالنص الدقيق الذي التقطته لتلك المباراة. وهذا يجعل أخطاء حدود المجموعة واضحة: إذا استحوذت المجموعة 1 على أكثر مما توقعت، فيمكنك رؤيتها وسحب القوس إلى الداخل.
المجموعات المسماة تحصل على نفس المعاملة. عندما تكتب (?<year>\d{4})-(?<month>\d{2})، يقوم المختبر بإظهار اللقطات بالاسم - <year> و <month>- إلى جانب مرادفاتها المرقمة، حتى تتمكن من تأكيد خريطة الأسماء للشرائح التي تنوي الحصول عليها قبل الاعتماد عليها match.groups.year في الكود. تجعل المجموعات المسماة الأنماط توثيقًا ذاتيًا والتعليمات البرمجية أكثر قابلية للقراءة، ورؤيتها يتم حلها بشكل صحيح في المختبر هي أسرع طريقة للثقة بها.
تظهر مصيدة ذات صلة للمختبر: تظهر المجموعة التي تشارك في النمط ولكنها لم '؛t المتطابقة في محاولة معينة كـ "؛ لا يوجد تطابق واقتباس؛ بدلاً من سلسلة فارغة. هذا التمييز مهم، لأنه في JavaScript مثل هذه المجموعة مهمة undefined، والرمز الذي يفترض ذلك '؛s سيتم دائمًا رمي السلسلة. رؤيته تم وضع علامة عليه في جهاز الاختبار يخبرك بحماية هذا الوصول.
ما هي نكهة ريجكس هذه، ولماذا تهم؟
التعبيرات العادية ليست لغة واحدة. النمط الذي يعمل في Python'؛s re يمكن أن تتصرف الوحدة بشكل مختلف - أو تتجاهل - جافا سكريبت، والعكس صحيح. هذا اختبار يستخدم جافا سكريبت (ECMAScript) محرك مدمج في متصفحك، وهو بايت مقابل بايت، ويتم تشغيل نفس المحرك Node.js. لذا، إذا كنت '؛ تقوم بكتابة كود JavaScript أو TypeScript أو Node، فإن النتائج هنا هي بالضبط ما سيفعله الكود الخاص بك.
هذه الدقة تقطع كلا الاتجاهين. إذا قمت بنسخ نمط من إجابة Stack Overflow المكتوبة لـ PCRE (PHP، و preg_ الوظائف التي أستخدمها باستمرار في عمل WordPress) أو لـ Python، فازت بعض الميزات '؛ ترجمة. افتقرت JavaScript تاريخيًا إلى تأكيدات البحث، واكتسبتها مؤخرًا نسبيًا، ولا تزال تتعامل مع بعض عمليات هروب خصائص Unicode بشكل مختلف. محددات الكمية والمجموعات الذرية من PCRE don'؛ موجودة في JavaScript على الإطلاق. العودية - إحدى ميزات PCRE لمطابقة الهياكل المتداخلة - ليس لها مكافئ لـ JavaScript.
النتيجة العملية: اختبار النكهة '؛ سيتم النشر فيها. يعد المختبر الذي ينفذ محركًا واحدًا بأمانة أكثر فائدة من الاختبار الذي ينفذ متوسطًا غامضًا لجميع المحركات، لأن "؛ لقد عملت في الاختبار والاقتباس؛ يحتاج إلى يعني "؛ سيعمل في التعليمات البرمجية الخاصة بي."؛ بالنسبة لعمل PHP وWordPress، أضع الاختلافات في الاعتبار وأتحقق من جانب الخادم بشكل منفصل؛ لأي شيء جافا سكريبت، هذا المختبر يكون مصدر الحقيقة. يتم تغطية مجموعة الأدوات الأوسع لهذا النوع من التحقق من الوعي اللغوي في دليل أدوات الترميز.
ما هي الاستخدامات اليومية لجهاز اختبار Regex؟
بناء وتصحيح أنماط التحقق من الصحة
حقول البريد الإلكتروني، وأرقام الهواتف، والرموز البريدية، والرخويات، وسلاسل الإصدارات الدلالية - كل نموذج يتحقق من صحة شيء ما، وعادة ما يكون التحقق من الصحة عبارة عن regex. يتيح لك جهاز الاختبار طرح الحالات المحرجة على النمط الخاص بك قبل شحنه: البريد الإلكتروني الذي يحتوي على علامة عنوان زائد، ورقم الهاتف الذي يحتوي على ملحق، وسلسلة الإصدار مثل 1.10.0 هذا النمط الساذج يقتطع. الصق عمودًا من القيم الحقيقية وشاهد القيم التي لا تتطابق.
استخراج البيانات من السجلات
سجلات الخادم وسجلات التطبيقات وصادرات CSV هي نصوص شبه منظمة، وregex هي الطريقة التي تسحب بها الحقول منها. تلتقط مجموعات الالتقاط الطابع الزمني والمستوى ومعرف الطلب. إن تقسيم مجموعة الاختبار '؛ لكل مباراة هو بالضبط العرض الذي تحتاجه هنا - الصق عشرات أسطر السجل الحقيقية، وتأكد من وصول كل حقل إلى المجموعة الصحيحة عبرها جميعًا، وليس فقط السطر الأول المرتب. هذا يتوافق مع تصحيح أخطاء API لسير العمل حيث يتم كشط أجسام الاستجابة والرؤوس لقيم محددة.
البحث والاستبدال عبر قاعدة التعليمات البرمجية
يدعم المحررون وIDEs regex في البحث والاستبدال، ويمكن للنمط السيئ هناك إعادة الكتابة أكثر بكثير مما هو مقصود. اختبار مباراة الجانب في جهاز اختبار مخصص قبل تشغيل الاستبدال هو التأمين الرخيص - تعرف بالضبط على ما يختاره النمط عبر عينة تمثيلية، ثم قم بتشغيل الاستبدال بثقة. كانت كارثة خريطة إعادة التوجيه الخاصة بي في الأساس عبارة عن عملية بحث واستبدال لم أختبرها مطلقًا مقابل المدخلات الحقيقية أولاً.
التعلم والتدريس ريجكس
التمييز المباشر يجعل من المختبر أداة تعليمية حقيقية. قم ببناء نمط رمز مميز واحد في كل مرة وشاهد مجموعة المطابقة تتقلص وتنمو عند إضافة أدوات التثبيت ومحددات الكمية والفئات. يرى \d+ احصل على رقم صحيح وبعد ذلك \d إن الحصول على رقم واحد يفيد الفهم أكثر من أي تفسير نثري. عندما تكون أنت و#39؛ جاهزان لتجميع نمط من المكونات بدلاً من تصحيح أخطاء نمط موجود، فإن regex builder هي الأداة المصاحبة.
كيف يمكنك تجنب فخ المطابقة ذو الطول الصفري؟
نمط يمكن أن يطابق سلسلة فارغة - a*، \d*، (foo)?- يمكن "؛match"؛ في كل موضع بين الشخصيات، مما ينتج عنه طوفان من المطابقات الفارغة. رمز مطابقة ساذج لا '؛ يتقدم بعد حلقات المطابقة ذات الطول الصفري إلى الأبد. ال اختبار يحرس هذا داخليًا من خلال التقدم دائمًا، لذلك لا يتم تعليقه أبدًا، ولكنه سيتم ذلك يعرض أنت المباريات الفارغة.
هذه الشاشة هي ميزة وليست ضوضاء. كومة من أعواد الثقاب الفارغة هي التي يخبرك المختبر أن محدد الكمية الخاص بك متساهل للغاية. إذا كنت تقصد "؛ رقم واحد أو أكثر، والاقتباس؛ لقد كتبت \d* عندما أردت \d+. إذا كانت هناك حاجة إلى مجموعة، قمت بوضع علامة اختيارية عليها بـ ?. رؤية التطابقات الفارغة هو التشخيص الذي يوجهك إلى الإصلاح. عندما يكون النمط الخاص بك صحيحًا، فإن التطابقات هي السلاسل الفرعية التي تهتم بها ولا شيء غير ذلك.
جافا سكريبت ريجكس مقابل النكهات الأخرى: مقارنة سريعة
| ميزة | جافا سكريبت (هذا المختبر) | PCRE (PHP) | بايثون re |
|---|---|---|---|
| المجموعات المسماة | (?<name>...) |
(?<name>...) أو (?P<name>...) |
(?P<name>...) |
| انظر خلفك | المدعومة (المحركات الحديثة) | مدعوم | مدعوم |
| المجموعات الذرية / الملكية | غير مدعوم | مدعوم | محدود |
| العودية | غير مدعوم | مدعوم | غير مدعوم |
| النقطة تتطابق مع علم السطر الجديد | s (دوتال) |
s (المجموع) |
re.DOTALL |
خاصية يونيكود \p{...} |
يتطلب u علم |
يتطلب u المعدل |
regex الوحدة فقط |
| مطابقة لزجة | y علم |
\G مرساة |
\G-مثل عبر match موضع |
الدرس المستفاد من الجدول '؛ هو ذلك "؛regex"؛ هي عائلة وليست معيارًا. يتداخل بناء الجملة بدرجة كافية لتهدئتك في أنماط النسخ عبر اللغات، والاختلافات هي بالضبط الميزات المتقدمة التي تصل إليها في المشكلات الصعبة. اختبار في النكهة المستهدفة. بالنسبة لجافا سكريبت والعقدة، هذا '؛ هذا المختبر؛ ال مجموعة أدوات مطور الويب يغطي المكان الذي تناسبه الأدوات الأخرى الخاصة باللغة.
هل من الآمن اختبار Regex مقابل النص الحساس؟
غالبًا ما يكون النص الذي تختبر regex مقابله من النوع الحساس: خطوط سجل الإنتاج بعناوين IP ومعرفات المستخدم، والتصدير بعناوين البريد الإلكتروني، وتكوين الملفات بأسماء المضيفين الداخلية. هذا & #39؛s بالضبط البيانات التي لديك ينبغي '؛ر الصقها في أداة تقوم بشحنها إلى الخادم.
ال Toolz.dev اختبار Regex يعمل بالكامل في متصفحك. تجميع الأنماط، والمطابقة، واستخراج المجموعة - كل ذلك من جانب العميل JavaScript، مع عدم وجود طلب شبكة يحمل النمط الخاص بك أو النص الخاص بك في أي مكان. قطع اتصالك بعد تحميل الصفحة واستمرار العمل. That'؛s ضمان معماري، وليس جملة سياسة الخصوصية، وit'؛s نفس مبدأ المتصفح الأول وراء كل أداة في المجموعة، المنصوص عليه في دليل خصوصية البيانات.
مما يعني أنه يمكنك لصق خطوط السجل الحقيقية - تلك التي تحتوي على معلومات تحديد الهوية الشخصية الفعلية التي تصنع نمطًا '؛ وتظهر حالات الحافة - وتصحيح الأخطاء ضدها بأمان. هذا & #39؛ بيت القصيد: يكون جهاز الاختبار مفيدًا فقط إذا قمت بتغذيةه بإدخال حقيقي، وغالبًا ما يكون الإدخال الحقيقي هو بالضبط ما يمكنك فعله '؛t إرساله إلى خادم شخص آخر '؛s.
أسئلة وأجوبة
كيف أختبر تعبيرًا عاديًا عبر الإنترنت؟
أدخل النمط الخاص بك في حقل النمط بدون الخطوط المائلة المحيطة، واختر علاماتك، والصق نموذج النص في منطقة الاختبار. يتم تمييز المباريات على الفور ويتم إدراج مجموعات الالتقاط لكل مباراة. كل شيء يعمل في متصفحك - لا يتم تحميل أي شيء.
ما هي نكهة regex التي يستخدمها هذا المختبر؟
ويستخدم محرك JavaScript (ECMAScript) RegExp المدمج في متصفحك، وهو مطابق للمحرك الموجود في Node.js. تتطابق النتائج مع كيفية تصرف نفس النمط في JavaScript وTypeScript. يختلف JavaScript regex عن وحدة إعادة PCRE وPython'؛s وأنماط Java في بعض الميزات المتقدمة مثل المجموعات الذرية والتكرار، لذا اختبر النكهة التي ستنشر فيها.
ماذا تعني أعلام regex g و i و m و s؟
تجد العلامة g (العالمية) جميع التطابقات بدلاً من التوقف عند البداية. تجعل علامة i المطابقة غير حساسة لحالة الأحرف. تجعل علامة m (متعددة الأسطر) نقاط التثبيت ^ و$ متطابقة عند فواصل الأسطر بدلاً من بداية السلسلة ونهايتها فقط. غالبًا ما يتم الخلط بين علامة s (dotAll) والنقطة تتطابق مع أحرف السطر الجديد أيضًا. غالبًا ما يتم الخلط بين علامتي m وs - يقوم m بتغيير نقاط التثبيت، بينما يقوم s بتغيير النقطة.
كيف تعمل مجموعات الالتقاط في المختبر؟
تقوم الأقواس الموجودة في النمط الخاص بك بإنشاء مجموعات التقاط. يسرد المُختبر كل مجموعة مرقمة بالنص الذي تم التقاطه لكل مباراة، حتى تتمكن من التحقق من شريحة السلسلة التي تم الاستيلاء عليها في كل جزء من النمط الذي تم الاستيلاء عليه. المجموعات المسماة مكتوبة كـ (؟...) تظهر بالاسم إلى جانب المجموعات المرقمة.
لماذا لا يتطابق regex مع أي شيء أو يلقي خطأ؟
عادةً ما يحتوي النمط الذي لا يتطابق مع أي شيء على حرف محدد للغاية أو حرف خاص غير مهرب مثل نقطة حرفية أو علامة زائد. النمط الذي يلقي خطأ به مشكلة في بناء الجملة، مثل قوس أو قوس غير متوازن. يعرض المُختبر رسالة الخطأ الدقيقة للمحرك '؛ حتى تتمكن من تحديد موقع المشكلة بسرعة.
كيف يمكنني المطابقة عبر خطوط متعددة؟
قم بتمكين علامة s (dotAll) إذا كنت بحاجة إلى النقطة لتمديد فواصل الأسطر، وقم بتمكين علامة m (متعددة الأسطر) إذا كنت تريد أن تتطابق نقاط التثبيت ^ و$ في بداية ونهاية كل سطر. يتيح الجمع بين الاثنين لنمط واحد العمل بشكل طبيعي مقابل الإدخال متعدد الأسطر مثل السجلات أو صفوف CSV.
هل من الآمن اختبار regex مقابل البيانات الحساسة؟
نعم. تحدث جميع المطابقات في JavaScript داخل متصفحك - لا يتم إرسال أي نمط أو نص اختبار إلى أي خادم، ولا يتم تسجيل أي شيء، وتعمل الأداة مع تعطيل اتصالك. يمكنك الاختبار بأمان مقابل ملفات السجل أو البيانات الشخصية أو التنسيقات الخاصة.
ما هو الفرق بين جهاز اختبار regex و regex builder؟
يقوم جهاز اختبار regex بتشغيل نمط موجود مقابل النص حتى تتمكن من التحقق منه وتصحيح أخطائه، بينما يساعدك منشئ regex في إنشاء نمط من المكونات أو القوالب الشائعة. استخدم Regex Builder الموجود على هذا الموقع لتجميع نمط، ثم أحضره إلى المختبر للتحقق منه مقابل بيانات عينة حقيقية.
تظل التعبيرات العادية قابلة للكتابة فقط حتى تقوم بتشغيلها مقابل مدخلات حقيقية، وتكون حالات الفشل هادئة - لا شيء يتطابق، والكثير من التطابقات، وتلتقط المجموعة الخاطئة، ولا يخبرك أي خطأ. يقوم المختبر بتحويل النمط إلى مرئي لصق regex الخاص بك، قم بتغذية النص الحقيقي القبيح، وشاهد بالضبط ما يمسك به قبل أن يمسك بالشيء الخطأ في الإنتاج.



