أداة اختبار regex — صحّح وطابق الأنماط أونلاين
اختبر أنماط regex فوراً مقابل أي نص. إبراز مطابقات حي، ومجموعات التقاط، ومعاينة استبدال، وتقسيم، ومُفسّر أنماط. بنكهة JavaScript، خاص 100٪، بلا تسجيل.
ما أداة اختبار regex؟
أداة اختبار regex (أداة اختبار تعابير منتظمة) هي أداة تتيح لك كتابة نمط regex، ولصق قطعة من نص الاختبار، ورؤية ما يطابقه النمط بالضبط — مع مجموعات الالتقاط، ومعاينة الاستبدال، وتفكيك الأعلام — دون إعادة ترجمة الكود أو تشغيل سكربت. للمطورين، يقصّر الحلقة من دقائق إلى ميلي ثانية: عدّل النمط، وراقب الإبرازات تتحرك، واشحن regex بثقة.
التعبير المنتظم لغة مدمجة لوصف أنماط النصوص. \d+ يطابق رقماً واحداً أو أكثر. [A-Za-z_]\w* يطابق معرّفاً نموذجياً. (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) يطابق تاريخ ISO ويسمّي كل جزء. التعابير المنتظمة هي العمود الفقري للبحث والاستبدال في كل محرر كود، والتحقق في كل نموذج، وتحليل السجلات في كل حزمة رصد، وgrep وsed وawk — أدوات يونكس التي تشغّل نصف الإنترنت. وهي أيضاً مشهورة بصعوبة كتابتها بشكل صحيح: محدّد كمي يخطئ بواحد أو هروب مفقود يمكن أن يطابق سلسلة فرعية خاطئة، أو يفقد مطابقة تماماً، أو — في أسوأ الحالات — يثير backtracking كارثياً يحتجز نواة CPU. أداة اختبار regex جيدة تلتقط كل وضع فشل من هذه قبل أن يبلغ الإنتاج.
يشغّل هذا المختبر محرك RegExp الأصلي وفق ECMA-262 الذي يُشحن في كل متصفح حديث — المحرك ذاته الذي تستدعيه من JavaScript أو TypeScript أو Node.js أو Deno أو Bun. هذا يعني: مجموعات الالتقاط (المرقّمة والمسمّاة بـ(?<name>...))، وتأكيدات lookahead وlookbehind ((?=...)، (?!...)، (?<=...)، (?)، والأعلام السبعة الأصلية (g، i، m، s، u، y، d)، وهروب خصائص Unicode (\p{Letter}، \p{Script=Han}) تحت /u، وهروب أحرف بنمط \d. الأنماط التي تتحقق منها هنا تُلصَق مباشرة في قاعدة كودك وتعمل دون تعديل. إن كنت تنقل من PCRE أو Python أو Java، يفكك المُفسّر كل علامة لترصد الصياغة التي لا تُترجم (المجموعات الذرية، والمحدّدات الامتلاكية، والمعدّلات السطرية).
ما يبرزه المختبر بما يتجاوز المطابقات الخام: يُدرج لوح Matches وcapture groups كل مطابقة مع إزاحاتها [start, end) وقيمة كل مجموعة التقاط — المعلومات ذاتها التي تحصل عليها من String.prototype.matchAll مع العَلَم /d، لكن مرتبة للمسح البصري. يُظهر تبويب Replace معاينة استبدال حية تدعم أبجدية القالب الكاملة $1 / $& / $` / $' / $$ / $<name> — تماماً ما تقبله String.replace في JavaScript. يطبّق تبويب Split String.split بـregex ويُظهر كل جزء. يجزّئ تبويب Explain النمط ويُعلّم كل قطعة بالإنجليزية البسيطة، مفيد لمراجعة الكود والتعليم والنقل بين اللهجات.
للخصوصية: كل عملية محلية. نمطك ونص اختبارك لا يغادران الصفحة أبداً — لا يُسجَّلان، ولا يُرسَلان إلى خدمة تحليلات، ولا يُخزَّنان على القرص. تستمر تفضيلات الواجهة فقط (التبويب الفعّال + الأعلام التي تستخدمها عادةً) في localStorage. هذا يجعل الأداة آمنة لعيّنات السجل المنقّحة، والأنماط المملوكة، والإعدادات الداخلية، والأنماط التي تحوي تلميحات عن مخطط بياناتك. مقارنةً بمختبرات مدعومة بالخوادم مثل regex101، قصة الخصوصية والتأخر أفضل بالتأكيد؛ المقايضة هي دعم نكهة واحدة (JavaScript فقط).
إن كنت جديداً على regex، تأتي قائمة Common patterns المنسدلة ببدايات مجرّبة في المعركة: عنوان بريد إلكتروني، وURL، وIPv4، وUUID، ولون hex، وتاريخ ISO، ورقم هاتف أمريكي، ونمط تقليم المسافة البيضاء الزائدة. حمّل واحداً، وراقب المطابقات مقابل نص العيّنة المرفق، ثم بدّل النمط حرفاً بحرف لتحس كيف يستجيب المحرك. اقرن هذا بأداة فروقات النص حين تريد مقارنة قبل/بعد لتنظيف مدفوع بـregex، وبـمنسق JSON حين يكون الإدخال أو الإخراج المتوقع JSON، وبـمرمّز URL حين تكون السلاسل التي تطابقها مرمّزة URL.
// The pattern you build in this tester drops straight into JavaScript.
// Example: extract every ISO date from a string with named groups.
const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const text = 'shipped 2026-05-21, scheduled 2026-06-30';
for (const m of text.matchAll(pattern)) {
console.log(m.groups.year, m.groups.month, m.groups.day);
// → 2026 05 21
// → 2026 06 30
}
// Same regex, used in a replace with $<name> templates:
text.replace(pattern, '$<day>/$<month>/$<year>');
// → 'shipped 21/05/2026, scheduled 30/06/2026'
// With the /d flag, every match carries [start, end] indices
// per capture group — the Matches panel uses this to paint offsets.
const p2 = /(?<year>\d{4})-(?<month>\d{2})/gd;
const m = [...text.matchAll(p2)][0];
m.indices.groups.year; // [8, 12] الميزات الرئيسية
إبراز مطابقات حي
كل مطابقة في نص اختبارك تضيء فور تحليل نمطك. الألوان المتناوبة تجعل المطابقات المتجاورة سهلة العدّ بصرياً، وشارة العدّ فوق النتيجة تخبرك بالإجمالي الدقيق — لا زر Run، ولا تأخير ارتداد فوق 200 مللي ثانية.
لوح جانبي لمجموعات الالتقاط
يُدرج لوح Matches وcapture groups على اليمين كل مطابقة كبطاقة مع إزاحاتها [start, end)، ونص المطابقة الكامل، وكل مجموعة التقاط موضعية + مسمّاة داخلها. تُسمّي المجموعات المسمّاة نفسها $<name> لتقرأ البيانات بالطريقة ذاتها التي ستستهلكها بها في الكود.
معاينة استبدال حية بـ$1 / $& / $<name>
انتقل إلى تبويب Replace لرؤية استبدالك مطبّقاً في الوقت الفعلي. أبجدية الاستبدال الكاملة في ECMAScript تعمل: $1..$N للموضعية، و$<name> للمسمّاة، و$& للمطابقة الكاملة، و$` و$' للبادئة/اللاحقة، و$$ لدولار حرفي. لوحان جنباً إلى جنب للإدخال والإخراج بنسخ بنقرة واحدة.
تقسيم بحدود regex
يستدعي تبويب Split String.prototype.split بـregex الخاص بك ويُظهر كل جزء كقائمة مرقّمة. تُعرض الأجزاء الفارغة برمز ⏎ لترى كيف تعامل المحرك مع الفواصل المتجاورة — مفيد لتصحيح تنظيف إدخال شبيه بـCSV.
مُفسّر أنماط (علامة بعلامة)
يجزّئ تبويب Explain نمطك إلى رقائق ملوّنة حسب الصنف (هروب / محدّد كمي / صف أحرف / مجموعة / مرساة / تبادل) ويُعلّم كل رقاقة بوصف بسطر واحد. اقرأ regex الخاص بك إلى نفسك قبل الشحن؛ استخدمه لمراجعة الكود أو التعليم.
آمن من ReDoS (مهلة زمن فعلي)
كل استدعاء مطابقة مغلّف بميزانية 250 مللي ثانية. الأشكال الكلاسيكية لـbacktracking الكارثي مثل (a+)+ و(a|aa)+b والمحدّدات الكمية المتداخلة بعمق تُجهَض بنظافة بتحذير Pattern timed out — تبقى الصفحة مستجيبة بدلاً من قفل التبويب. كشف بلا صندوق رمل من جانب الخادم.
مكتبة الأنماط الشائعة
بدايات مجرّبة في المعركة للأنماط الثمانية التي يصل إليها المطورون أكثر: بريد إلكتروني، وURL، وIPv4، وUUID v4، ولون hex، وتاريخ ISO، ورقم هاتف أمريكي، وتقليم المسافة البيضاء الزائدة. كل واحد يُحمَّل مع عيّنة مطابقة لترى regex يعمل قبل أن تعدّله.
مشاركة رابط دائم (بلا رفع)
Copy link يرمّز النمط + الأعلام + النص العيني في تجزئة URL (#p=…&f=gim&t=…). لا تنقل المتصفحات أجزاء URL في الطلبات، فرابط مشترك يستنسخ حالتك على جهاز المستلم دون لمس خوادم go-tools.org. مكتفٍ ذاتياً، صديق للتدقيق.
خاص 100٪، فقط في المتصفح
regex ونص اختبارك لا يغادران جهازك أبداً. لا طلبات شبكة، ولا تسجيل، ولا تحليلات على ما تكتبه. تحقق في DevTools ← Network: صفر طلبات حين تكتب. آمن للأنماط المملوكة، والسجلات المنقّحة، وأي نص لن تلصقه في regex101.
أمثلة محلولة
استخراج كل عنوان بريد إلكتروني من فقرة
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g الصق النمط مع تشغيل العَلَم /g، وأنزل فقرة في نص الاختبار، فيُضاء كل بريد إلكتروني في العرض المبرز. يُدرج لوح Matches وcapture groups على اليمين كل عنوان مع إزاحاته [start, end) — مفيد حين تمرّر النمط ذاته إلى grep أو sed أو محرر كود.
التقاط أجزاء التاريخ بمجموعات مُسمّاة
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g تظهر المجموعات المُسمّاة وفق ECMA-262 في اللوح الأيمن بصيغة $<year> و$<month> و$<day>. انتقل إلى تبويب Replace وجرّب $<day>/$<month>/$<year> لإعادة تنسيق تواريخ ISO إلى صيغة يوم/شهر/سنة بتمريرة واحدة — الحيلة ذاتها تعمل في أي استدعاء replace حديث بـJS.
بحث/استبدال بمرجعيات خلفية $1
(\w+) (\w+)
Replacement: $2, $1 → Jack Doe → Doe, Jack
مجموعتا التقاط غير مُسمّاتين، وقالب الاستبدال $2, $1، ويعطيك تبويب Replace معاينةً حية. تُدعم $& و$` و$' و$$ و$<name> — تماماً أبجدية الاستبدال من مواصفة ECMAScript، فما تنسخه يعمل دون تعديل في أي محرك JS.
تجريد المسافة البيضاء الزائدة سطراً سطراً
[ \t]+$
/[ \t]+$/gm
اجمع علمَيْ /g (عام) و/m (متعدد الأسطر) ليرسو $ عند نهاية كل سطر، لا نهاية الإدخال فقط. تُظهر معاينة تبويب Replace بقيمة استبدال فارغة فرقاً نظيفاً: تختفي علامات الجدولة والمسافات الزائدة، ويبقى النثر في مكانه. النمط ذاته مع إيقاف العَلَم /s (dotAll) يمنع . من عبور الأسطر الجديدة.
اكتشاف الـbacktracking الكارثي والنجاة منه
(a+)+b
Test text: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
المحدّدان الكميان + المتداخلان يشكّلان نمط ReDoS كلاسيكياً. في مختبر ساذج يعلّق هذا التبويب. هنا يطلق حارس الزمن الفعلي بعد 250 مللي ثانية، ويظهر لافتة Pattern timed out، وتبقى الصفحة مستجيبة. ثبّت النمط، أو انتقل إلى تبادل غير متداخل، أو استخدم تعابير شبه ذرية — وأعد الاختبار.
تقسيم سطر شبيه بـCSV بفواصل مختلطة
[,;|]\s*
alpha, beta; gamma | delta → ["alpha", "beta", "gamma", "delta"]
انتقل إلى تبويب Split. أي فاصلة أو فاصلة منقوطة أو شرطة عمودية (تليها مسافة بيضاء اختيارية) تصبح حدّ جزء. مفيد لتنظيف قوائم الوسوم المنسوخة، أو تطبيع إدخال المستخدم، أو معالجة حقول السجل قبل محلل CSV حقيقي — انظر CSV إلى JSON حين تكون البيانات فعلاً وفق RFC 4180.
كيف تستخدم أداة اختبار regex
- 1
اكتب نمطك بين الشرطتين المائلتين
أنزل أي تعبير منتظم وفق ECMA-262 في حقل /…/. تُبرز الأنماط السيئة بالأحمر مع رسالة المحلل؛ تتقدم الأنماط الصالحة إلى المطابقة الحية.
- 2
بدّل الأعلام التي تحتاجها
g (عام)، i (غير حساس لحالة الأحرف)، m (متعدد الأسطر)، s (dotAll)، u (unicode)، y (لاصق)، d (إزاحات). كل رقاقة تضيء عند التشغيل؛ القراءة يمين النمط تُظهر المعرف الأصلي.
- 3
الصق نص الاختبار
تُبرز المطابقات بألوان متناوبة أثناء كتابتك. يُدرج لوح Matches وcapture groups على اليمين كل مطابقة مع إزاحات [start, end) وقيمة كل مجموعة التقاط (المجموعات المسمّاة مُعلَّمة $<name>).
- 4
بدّل التبويبات لـReplace أو Split أو Explain
Replace يعاين قالب استبدال بجانب الإدخال. Split يقطّع عند كل حد مطابقة. Explain يفكك النمط علامة بعلامة بوصف باللغة الإنجليزية البسيطة لكل عنصر.
- 5
انسخ المعرف الأصلي أو شارك رابطاً دائماً
Copy /pattern/flags يضع المعرف الأصلي لـregex في حافظتك للاستخدام المباشر في JavaScript / TypeScript / Node. Copy link يرمّز الحالة الكاملة في تجزئة URL (بلا رفع) فيمكن لزميل أن يستنسخها محلياً.
أخطاء regex الشائعة
نسيت العَلَم /g فحصلت على مطابقة واحدة فقط
بدون /g (أو /y)، يتوقف المحرك بعد المطابقة الأولى. الطرق match وmatchAll وreplace وsplit تتصرف بشكل مختلف حول العَلَم العام. بدّل /g وأعد التشغيل؛ يقفز العدّ فوق النتائج من 1 إلى N.
Pattern: /\d+/ → '1 22 333' yields only ['1']
Pattern: /\d+/g → '1 22 333' yields ['1', '22', '333']
محدّد كمي جشع استهلك الكثير
.+ يستهلك أكبر قدر ممكن، فـ<.+> مقابل and <b> يلتقط and <b>، لا . استخدم محدّدات كمية كسولة (.+?)، أو صفوف أحرف أكثر تقييداً ([^>]+)، أو ثبّت بنظرات جانبية.
Pattern: /<.+>/ → matches '<a> and <b>'
Pattern: /<[^>]+>/ → matches '<a>' and '<b>' separately
backtracking كارثي من محدّدات كمية متداخلة
(a+)+b ضد سلسلة فشل طويلة ينفجر أسياً. تطلق لافتة Pattern timed out بعد 250 مللي ثانية؛ أعد الكتابة لإزالة التداخل: a+b يؤدي العمل ذاته في زمن خطي. محاكاة المجموعة الذرية (?=(a+))\1b خيار آخر.
Pattern: /(a+)+b/ on 'aaaaaaaaaaaaaaaaaaaaac' → timeout
Pattern: /a+b/ on the same input → instant 'no match'
المراسي $ و^ لا تتصرف مثل \A و\Z في Python
في JavaScript، يعني ^ و$ بداية السطر / نهاية السطر فقط حين يكون /m مفعّلاً؛ وإلا فهما يعنيان بداية السلسلة / نهاية السلسلة. \A و\Z في Python (اللذان يعنيان دائماً حدود السلسلة) غير موجودين في JS. بدّل /m حسب الحاجة.
Pattern: /^Error/ on a multi-line log without /m → matches only first line
Pattern: /^Error/m on the same input → matches every line starting with Error
استخدمت $1 في سلسلة لكنك استدعيت replace بدالة
text.replace(re, '$1') يوسّع المرجعية الخلفية. text.replace(re, () => '$1') يمرّر سلسلة حرفية '$1' لأن الدوال لا ترى علامات القالب. داخل الدالة، تصل مجموعات الالتقاط كمعاملات موضعية.
text.replace(/(\w+)/, m => '$1') → yields literal '$1'
text.replace(/(\w+)/, (_, g1) => g1.toUpperCase()) → uses the capture
أحرف Unicode لا تطابق مع \w أو .
\w الافتراضي هو [A-Za-z0-9_]. لمطابقة كل حرف في كل كتابة، فعّل /u وانتقل إلى \p{Letter} (\p{L}). تتوقف النقطة أيضاً عند الأسطر الجديدة افتراضياً — استخدم /s (dotAll) حين تريد أي حرف فعلاً.
Pattern: /\w+/ matches 'hello' but not 'héllo' or '你好'
Pattern: /\p{Letter}+/u matches all three لصقت نمط PCRE فحصلت على SyntaxError
JavaScript لا يدعم المجموعات الذرية (?>...)، والمحدّدات الامتلاكية a++، والمعدّلات السطرية (?i)، والشرطيات (?(1)yes|no)، و\A / \Z. يُسمّي خطأ المحلل البنية المخالفة — أعد الكتابة إلى المكافئ المدعوم في JS (محاكاة نظرة جانبية، تبديل عَلَم منفصل، تبادل).
Pattern: (?i)foo → SyntaxError: invalid group
Pattern: foo with /i flag toggled on → same effect
من يستخدم هذه الأداة
- التحقق من إدخالات النماذج قبل الشحن
- أكّد أن regex الخاص بالبريد الإلكتروني / الهاتف / الرمز البريدي / اسم المستخدم يطابق ما تتوقع — ويرفض ما لا تتوقع — عبر الحالات الحدية (الأسماء بـUnicode، والإيهام بعلامة الجمع، والصيغ الدولية) قبل أن يبلغ التحقق الإنتاج ويردّ المستخدمين الحقيقيين.
- استخراج البيانات من السجلات والإعدادات
- ابنِ نمطاً يسحب معرّفات الطلب أو رموز الحالة أو زمن الاستجابة أو سطور تتبع الاستثناءات من شريحة سجل عشوائية. المجموعات المسمّاة تجعل البيانات موثّقة ذاتياً؛ يُظهر لوح Matches الإزاحات لتمرّر regex ذاته إلى rg --replace أو grep -oE بعدها.
- بحث/استبدال عبر قاعدة كود
- صُغ نمط إعادة هيكلة (مثلاً (\w+)\.apply\(null,\s*\[(.*?)\]\) → $1($2)) هنا، عاين الاستبدال على مقتطفات تمثيلية، ثم الصق regex المتحقق منه في بحث/استبدال محررك على مستوى المشروع بثقة.
- فحص سلامة نمط وجدته أونلاين
- ألصقت regex من StackOverflow أو مدونة؟ أنزله في تبويب Explain — كل علامة تحصل على تعليق بالإنجليزية البسيطة. يلتقط مشكلات دقيقة (.+? حيث أردت .+، أو مراسي ^/$ مفقودة، أو محدّدات كمية جشعة بالخطأ) قبل أن يهبط regex في كودك.
- تعليم regex لزميل في الفريق
- افتح تبويب Explain على نمط يعمل وامش فيه علامة بعلامة. الترميز اللوني (هروب / محدّد كمي / صف أحرف / مجموعة / مرساة / تبادل) يتيح للمتعلم رؤية الشكل البنيوي لـregex، لا الأحرف فقط.
- نقل نمط بين اللغات
- لديك regex بـPython أو PCRE تحتاج استخدامه في JavaScript؟ الصقه هنا. إن تحلل، يُظهر لك المُفسّر الدلالات المكافئة بـJS؛ إن لم يفعل، يُسمّي خطأ المحلل البنية المخالفة (المجموعات الذرية، المحدّدات الامتلاكية، (?i) السطري) لتعرف ما يجب إعادة كتابته بالضبط.
- تصحيح regex إنتاجي بطيء
- إن اشتُبه بأن regex في الخادم يعاني backtracking كارثياً، الصقه في هذا المختبر مع عيّنة من الإدخال. يطلق حارس الزمن الفعلي البالغ 250 مللي ثانية على الحالات المرضية، فيعطيك تشخيصاً فورياً قبل أن تتناول أدوات التحليل — ويشير المُفسّر إلى السبب الجذري للمحدّدات الكمية المتداخلة.
ملاحظات المحرك والخوارزمية
- محرك RegExp وفق ECMA-262 (متصفح أصلي)
- يستخدم new RegExp(pattern, flags) والمحرك الذي يُشحن مع V8 / JavaScriptCore / SpiderMonkey — دلالات regex ذاتها التي تحصل عليها في JavaScript أينما كان. الأنماط التي تتحقق هنا تعمل دون تعديل في Node.js وDeno وBun وكل متصفح حديث.
- تكرار المطابقة عبر String.matchAll
- يستخدم التكرار العام text.matchAll(regex) بدلاً من حلقة lastIndex يدوية، فكل مطابقة تحمل مجموعات الالتقاط، والمجموعات المسمّاة، و(مع /d) إزاحات [start, end]. تُعالَج المطابقات بعرض صفر بتقدم lastIndex القياسي +1 لتجنب الحلقات اللانهائية.
- مهلة زمن فعلي للحماية من ReDoS
- ميزانية 250 مللي ثانية تلفّ كل استدعاء مطابقة واستبدال وتقسيم. لا يزال بإمكان المحرك التراجع داخلياً على محاولة مطابقة واحدة، لكن التكرار الخارجي يتعاون مع الميزانية — تُجهَض الأنماط المرضية بـtimedOut: true وتُبرز الواجهة تحذيراً بدلاً من قفل التبويب.
- إعادة تنفيذ قالب الاستبدال
- يحلل تبويب Replace $1..$N و$& و$` و$' و$$ و$<name> يدوياً بدلاً من التفويض إلى String.replace، فتتصرف المعاينة بشكل متطابق عبر المحركات (Safari الأقدم، Node الأقدم) حيث لقوالب المجموعات المسمّاة حالات حدية. الإخراج تماماً ما تنتجه محركات JavaScript الحالية.
- مُجزّئ نمط للمُفسّر
- يشغّل تبويب Explain مُجزّئاً مكتوباً يدوياً يصنّف كل شظية نمط (هروب / حرف ميتاوي / محدّد كمي / صف أحرف / فتح مجموعة / إغلاق مجموعة / مرساة / تبادل). البنى غير المألوفة تسقط إلى literal بملاحظة عامة فلا يُسقط المُفسّر المحتوى صامتاً أبداً.
- روابط دائمة عبر تجزئة URL (لا تُنقل أبداً)
- تُرمَّز حالة المشاركة في جزء location.hash (#p=…&f=…&t=…&tab=…). لا تنقل المتصفحات الجزء في طلبات HTTP، فتستقبل خوادم go-tools.org صفر بيانات حين يُفتح رابط دائم. تحدث الاستنساخ بالكامل على جهاز المستلم.
أفضل ممارسات regex
- ثبّت الأنماط حين تقصد ذلك
- ^pattern$ يطابق سلسلة دقيقة؛ pattern يطابق أي مكان. الخيار الخطأ هو الخطأ الأشيع في التحقق من النماذج: غياب ^ يدع attacker.com/ أمامية تتسلل عبر فحص النطاق؛ غياب $ يدع قمامة لاحقة تمرّ. استخدم تبويب Match على عيّنات معطوبة عمداً لتأكيد ما يُرفض.
- فضّل المجموعات غير الملتقطة للبنية الصرفة
- (?:foo|bar)+ و(foo|bar)+ متطابقتان وظيفياً، لكن الأولى لا تخصص مجموعة التقاط. تناول (?:…) كلما كانت المجموعة موجودة فقط لمحدّد كمي أو تبادل — يبقي $1..$N المرقّمة مستقرة ويوفّر قدراً صغيراً من عمل المحرك.
- استخدم العَلَم /u لأي شيء يتجاوز ASCII
- بدون /u، تعامل النقطة و\w أحرف الزوج البديل (الإيموجي، نقاط الرموز خارج BMP) كوحدتَيْ UTF-16. مع /u، تكون نقطة رمز واحدة لكل منها — ما سيدركه مستخدموك. /u يفعّل أيضاً \p{Letter} وهروب الخصائص الأخرى. اضبط /u افتراضياً للأنماط الجديدة ما لم يكن لديك سبب محدد لعدم ذلك.
- سمِّ مجموعات الالتقاط
- (?<year>\d{4})-(?<month>\d{2}) موثّق ذاتياً. بعد ستة أشهر حين تقرأ regex ثانية، m.groups.year هو السنة بوضوح — m[1] ليس كذلك. قوالب الاستبدال بـ$<name> تنجو من إعادة ترتيب المجموعات أيضاً: القوالب الموضعية تنكسر لحظة أن يضيف شخص مجموعة أخرى.
- اختبر حالات الفشل، لا النجاح فقط
- أداة اختبار regex هي للفشل. أكّد ما يطابقه نمطك، ثم بدّل نص الاختبار عمداً لترى ما لا يطابقه — مسافة بيضاء أمامية، مسافة بيضاء لاحقة، أجزاء مفقودة، أجزاء إضافية، حالة أحرف خاطئة، كتابات مختلطة. الأنماط التي تمرّر إدخالاً صحيحاً لكنها تقبل قمامة هي الأخطاء التي يفضحها الإنتاج أولاً.
الأسئلة الشائعة
هل يُرسَل regex أو نص الاختبار إلى خادمكم؟
ما نكهة regex التي يستخدمها هذا المختبر — PCRE أم Python أم Java أم JavaScript؟
ماذا يفعل كل عَلَم من g وi وm وs وu وy وd؟
كيف أكتب مجموعات الالتقاط وكيف أشير إليها لاحقاً؟
كيف يعمل lookahead وlookbehind، وما فائدتهما؟
لماذا يعلّق regex الخاص بي المتصفح، وما هو backtracking الكارثي؟
كيف يختلف مختبر regex هذا عن regex101.com؟
كيف أهرّب الأحرف الخاصة مثل . | ( ) [ ] { } * + ? ^ $ \؟
هل أستطيع مشاركة regex مع زميل عبر رابط؟
هل يدعم المختبر Unicode والإيموجي والكتابات غير اللاتينية؟
ما الفرق بين .match و.matchAll و.replace و.split مع regex؟
لماذا لا يعمل regex الخاص بـPython أو Java هنا؟
هل ثمة حد أقصى لحجم النص أو عدد المطابقات؟
أدوات ذات صلة
عرض جميع الأدوات →مقارنة النصوص واكتشاف الفروقات
معالجة النصوص
قارن نصّين فورًا داخل متصفحك. عرض جنبًا إلى جنب مع إبراز الفروقات على مستوى الكلمة، وتصدير unified diff، وتجاهل حالة الأحرف والمسافات والأسطر الفارغة. خصوصية كاملة — نصّك لا يغادر جهازك.
عداد الكلمات والأحرف المجاني
معالجة النصوص
عُدّ الكلمات والأحرف والجمل والفقرات وزمن القراءة فوراً. عداد لحظي يتحقق من حدود Twitter ووصف SEO وInstagram. مجاني، خاص، بلا تسجيل.
محوّل الأنظمة العددية — ثنائي وست عشري وعشري وثماني
أدوات التحويل
حوّل بين الأنظمة الثنائية والست عشرية والعشرية والثمانية وأي أساس من 2 إلى 36 فوراً — أداة مجانية أونلاين تعمل في متصفّحك. جرّبها الآن.
محوّل Base64 — ترميز وفك ترميز أونلاين
الترميز والتنسيق
رمّز وفك ترميز Base64 مجاناً أونلاين — محوّل فوري مع دعم UTF-8 والرموز التعبيرية. خصوصية 100% — يعمل في متصفّحك. جرّبه الآن.
مولد crontab ومنشئ تعبير cron
التاريخ والوقت
أنشئ تعبيرات cron وتحقق منها وفُكَّها داخل متصفحك. معاينة مباشرة للتشغيل التالي بالتوقيت المحلي أو UTC. صيغة POSIX من خمسة حقول، قوالب جاهزة، ووصف بلغة طبيعية. مجاني، خاص، بلا تسجيل.
محوّل CSV إلى JSON
الترميز والتنسيق
حوّل CSV إلى JSON في متصفحك. RFC 4180، استنتاج الأنواع، صف العنوان، أمان الأعداد الكبيرة. خصوصية 100%.