النص

Regex Tester / Find & Replace

اختبار التعبيرات النمطية على نص حقيقي: تمييز التطابقات وتحليل مجموعات الالتقاط، أو استبدال التطابقات الموجودة بنص جديد.


                        

                        

A regular expression (regex) is a compact language for describing patterns in text — for searching, validating a format, or replacing matches. This tool highlights matches in real text as you type the pattern, breaks out capture groups, and supports a find-and-replace mode.

How to use it

Common uses

Things to keep in mind

Greedy quantifiers (*, +) grab as many characters as possible — add ? for the minimal match instead (e.g. .*? instead of .*).

Syntax varies slightly between languages — an expression that works here (a JavaScript engine) may need adjusting for PCRE, .NET, or Python.

مقالة عن هذه الأداة: التعبيرات النمطية: الأساسيات وفخّ المطابقة الجشعة

الأسئلة الشائعة

ما محرك التعبيرات النمطية المستخدم في الأداة؟

تستخدم الأداة محرك JavaScript للتعبيرات النمطية وليس PCRE، لذا بعض الصياغات الخاصة بـ PCRE فقط مثل بعض أنماط النظرة الخلفية المتقدمة أو recursive patterns قد لا تعمل هنا.

ما الفرق بين وضعي الاختبار والاستبدال، وماذا عن الأعلام والمجموعات؟

وضع الاختبار يعرض التطابقات ومجموعات الالتقاط بما فيها المجموعات المسمّاة دون تعديل النص، بينما وضع الاستبدال يستبدل التطابقات بنص جديد باستخدام $1 وغيرها؛ كما تدعم الأداة الأعلام القياسية مثل g وi وm، وتفرّق بين الكمّيات الجشعة (greedy) والكسولة (lazy) مثل * وَ*؟.

هل النص والتعبير النمطي اللذان أدخلهما يُرسلان إلى خادم؟

لا، الاختبار والاستبدال يتمّان بالكامل داخل متصفحك عبر JavaScript، دون إرسال أي بيانات إلى خادم.

ما هو التراجع الكارثي (catastrophic backtracking)؟

المكمّمات المتداخلة مثل (a+)+ قد تجبر المحرك، على مدخلات معينة، على تجربة عدد أُسّي من التوليفات — فتتجمد الصفحة أو السكربت على تعبير يبدو بسيطًا. هذه ثغرة حقيقية (ReDoS)، لذا يجدر اختبار المكمّمات المتداخلة المعقدة على سلاسل طويلة شبه متطابقة.

لماذا يعمل تعبيري في لغة برمجة، ولا يعمل في لغة أخرى؟

صياغة التعبيرات النمطية غير موحّدة تمامًا: PCRE (المستخدمة في PHP ولغات أخرى كثيرة) وَ.NET وَPython re وَJavaScript لكل منها اختلافات طفيفة في دعم بعض البنى (مثل النظرة الخلفية أو المجموعات المسمّاة) — تعبير كُتب لمحرك معين لا يعمل بالضرورة دون تعديل في محرك آخر.

مقالات: النص

camelCase وsnake_case وkebab-case: متى نستخدم كل صيغة

لماذا يوجد camelCase وsnake_case وkebab-case، وأين يُستخدم كل منها عادة.

Text Diff: كيف تعمل خوارزمية إيجاد الفروقات بين النصوص

كيف تجد خوارزمية الديف أصغر مجموعة تغييرات بين نسختين من نص.

فرز الأسطر: لماذا يختلف الفرز الأبجدي عن العددي

لماذا يعامل الفرز الأبجدي الأرقام كنص، وكيف يختلف ذلك عن الفرز العددي.

الهروب بالأحرف: لماذا يختلف حسب السياق (JS وJSON والشِل والريجكس)

لماذا لا توجد قاعدة هروب واحدة تصلح لكل السياقات: JS وJSON والشِل والريجكس.

CRLF وLF: لماذا لا تزال نهايات الأسطر تسبّب مشاكل

من أين جاء الفرق بين CRLF وLF، ولماذا لا يزال يسبب مشاكل مع git والسكربتات.

عدّ الأحرف والكلمات: لماذا يعتمد على يونيكود

لماذا يمكن أن يتكون رمز تعبيري واحد ظاهريًا من عدة نقاط ترميز في يونيكود.

Lorem Ipsum: من أين جاء نص الحشو ولماذا لا معنى له

من أين جاء نص Lorem Ipsum فعليًا، ولماذا يُستخدم نص بلا معنى بدلاً من نص حقيقي.

Slugify: كيف يتحول العنوان إلى رابط صالح

كيف يتحول عنوان مقالة إلى رابط نظيف وقابل للقراءة بشرطات.

Markdown: لماذا أصبح معيار التوثيق

لماذا يظل Markdown مقروءًا حتى في صورته الخام، بخلاف HTML.

المسافات غير المرئية: لماذا تفشل مقارنة نصين متطابقين ظاهريًا

كيف يمكن لمسافة غير مرئية أن تجعل مقارنة نصين متطابقين ظاهريًا تفشل.

عكس النص: لماذا يفشل مع الرموز التعبيرية

لماذا يكسر عكس النص الساذج الرموز التعبيرية المركّبة من عدة نقاط ترميز.

تحليل تكرار النص: من سحابة الكلمات إلى كسر الشيفرات

كيف ساعد تحليل تكرار الحروف تاريخيًا في كسر شيفرات الاستبدال البسيطة.