مختبر Regex لـ JavaScript

اكتب تعبيرًا نمطيًا وشاهد كل تطابق مميَّزًا أثناء الكتابة، مع مجموعات الالتقاط ومعاينة الاستبدال ومكتبة من الأنماط الجاهزة.

يعمل في متصفحكبدون تسجيللا يُرفع شيء

التطابقات مميَّزة

    
استخدم $1 و$<name> و$& (التطابق كاملًا)
تفاصيل التطابق
#الموضعالتطابقالمجموعات
ورقة مرجعية لـ Regex
.أي حرف عدا السطر الجديد (أي حرف مع s)
\d \w \sرقم، حرف كلمة، مسافة بيضاء
\D \W \Sليس رقمًا، ليس حرف كلمة، ليس مسافة بيضاء
[abc] [^abc]أيٌّ من / لا شيء من a وb وc
[a-z0-9]نطاق أحرف
\p{L} \p{N}حرف / رقم Unicode (يتطلب u)
^ $بداية / نهاية المدخلات (السطر مع m)
\b \Bحد كلمة / ليس حدًّا
* + ?0 أو أكثر، 1 أو أكثر، 0 أو 1
{n} {n,} {n,m}n بالضبط، n على الأقل، بين n وm
*? +? ??كسول (أقل عدد ممكن)
a|ba أو b
(…)مجموعة التقاط، يُشار إليها بـ $1
(?<name>…)مجموعة مُسمّاة، $<name>
(?:…)مجموعة غير ملتقِطة
\1 \k<name>مرجع خلفي
(?=…) (?!…)نظرة أمامية / نظرة أمامية سالبة
(?<=…) (?<!…)نظرة خلفية / نظرة خلفية سالبة
\. \* \\أحرف حرفية مُهرَّبة
\n \t \rسطر جديد، Tab، إرجاع العربة
\uFFFFوحدة ترميز Unicode
\u{1F600}نقطة ترميز (يتطلب u)
$&التطابق كاملًا في نص الاستبدال
$` $'النص قبل / بعد التطابق

طريقة استخدام مختبر Regex

  1. أدخل النمط بين الشرطتين المائلتين، دون / المحيطة.
  2. فعّل العلامات مثل g (كل التطابقات) وi (تجاهل الحالة) وm (متعدد الأسطر).
  3. الصق نص الاختبار. تُميَّز التطابقات على اليسار وتُدرج مع موضعها ومجموعات الالتقاط في الأسفل.
  4. فعّل استبدال وأدخل نص استبدال مثل $1 أو $<name> لمعاينة String.replace.
  5. اختر نمطًا من مكتبة الأنماط للبدء من regex مُختبَر للبريد الإلكتروني أو URL أو IP أو التاريخ.

التعبيرات النمطية في JavaScript

يستخدم هذا المختبر محرك RegExp الخاص بمتصفحك، لذا فالنتائج هي تمامًا ما تُرجعه String.match وmatchAll وreplace وRegExp.exec في JavaScript وNode.js. ويشمل ذلك الصياغة الحديثة: المجموعات المسمّاة (?<name>…)، والنظرة الخلفية (?<=…)، وتسلسلات خصائص Unicode مثل \p{L} مع العلامة u، ومؤشرات التطابق مع العلامة d.

ماذا تفعل العلامات

العلامةالاسمالتأثير
gglobalالعثور على كل تطابق بدلًا من التوقف عند الأول.
iignoreCaseتتطابق الحروف بغض النظر عن حالتها.
mmultilineيطابق ^ و$ بداية كل سطر ونهايته.
sdotAllتطابق . فواصل الأسطر أيضًا.
uunicodeمعاملة النمط كنقاط ترميز؛ ويُفعّل \p{…} و\u{…}.
ystickyالمطابقة فقط عند موضع lastIndex الحالي.
dhasIndicesالإبلاغ عن موضعي البداية والنهاية لكل مجموعة التقاط.

الحماية من التراجع الكارثي

الأنماط ذات المحددات الكمية المتداخلة، مثل (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 داخل متصفحك. يُحفظ النمط والنص في متصفحك فقط لتجدهما عند عودتك.

أدوات ذات صلة