ورقة مرجع التعابير النمطية: البناء والأعلام والأنماط
إجابة سريعة
. = أي حرف، * = صفر+، + = واحد+، ? = اختياري، [] = فئة، () = مجموعة، ^ = بداية، $ = نهاية. استخدم أداة اختبار التعابير النمطية المجانية للمطابقة في الوقت الفعلي في متصفحك.
مقدمة
التعابير النمطية تستخدم أحرف خاصة للأنماط: . (أي حرف)، * (صفر أو أكثر)، + (واحد أو أكثر)، ? (اختياري)، [] (فئة أحرف)، () (مجموعة)، | (أو). المراسي: ^ (بداية)، $ (نهاية). الأعلام: g (عالمي)، i (غير حساس)، m (متعدد الأسطر).
خطوة بخطوة
-
فئات الأحرف — تطابق مجموعة من الأحرف
[abc] يطابق a أو b أو c. [^abc] يطابق أي شيء باستثناء a، b، c. [a-z] يطابق أي حرف صغير. الفئات المحددة مسبقًا: \d = [0-9]، \D = غير أرقام، \w = [A-Za-z0-9_]، \W = غير كلمة، \s = مسافة بيضاء، \S = مسافة غير بيضاء، . = أي حرف باستثناء السطر الجديد (استخدم علامة s لتضمين السطر الجديد).
-
محددات الكمية - كم مرة يجب تكرارها
* = 0 أو أكثر. + = 1 أو أكثر. ؟ = 0 أو 1. {ن} = بالضبط ن. {ن،} = على الأقل ن. {ن،م} = بين ن و م. يضيف ؟ للمطابقة البطيئة (على سبيل المثال، *؟ يطابق أقل عدد ممكن). الجشع هو الوضع الافتراضي ويمكن أن يسبب تراجعًا كارثيًا في الأنماط المتداخلة.
-
المراسي والحدود - أين تتطابق
^ يطابق بداية السلسلة (أو السطر الذي يحمل علامة m). $ يطابق النهاية. \b يطابق حدود الكلمة (بين \w و\W). \B يتطابق مع حدود غير الكلمات. المراسي ذات عرض صفري — فهي تختبر الموضع دون استهلاك الأحرف.
-
المجموعات والتناوب
(abc) هي مجموعة التقاط؛ استخدم 1 دولارًا و 2 دولارًا في الاستبدالات. (?:abc) هي مجموعة غير ملتقطة. (?=abc) هو نظرة للأمام (يؤكد ما يلي). (؟!abc) هو نظرة مستقبلية سلبية. (؟<=abc) هو مظهر خلفي (ES2018+). a|b هو التناوب (a أو b).
-
الأعلام — تغيير سلوك المطابقة
g = عالمي (ابحث عن كافة التطابقات، وليس الأولى فقط). i = حساس لحالة الأحرف. م = متعدد الأسطر (^ و$ يتطابقان مع حدود الخط). s = dotAll (. يطابق السطر الجديد). u = unicode (تعامل مع النمط على أنه نقاط ترميز Unicode؛ وهي ضرورية للرموز التعبيرية والأحرف النجمية). y = مثبت (يتطابق مع lastIndex فقط).
أمثلة
مطابقة عنوان البريد الإلكتروني (عملي، RFC 5322 مبسط)
مدخل: Pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
الإخراج: يطابق "user@example.com" و"a.b@sub.domain.co" ولكن ليس "plainaaddress" أو "@no-user.com"
استخرج جميع رموز الألوان السداسية من CSS
مدخل: Pattern: /#[0-9a-fA-F]{3,8}\b/g
الإخراج: In 'color: #fff; background: #1a2b3c4d' finds ['#fff', '#1a2b3c4d']
التحقق من صحة تاريخ ISO 8601 (YYYY-MM-DD)
مدخل: Pattern: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/
الإخراج: يطابق "2026-08-28" لكنه يرفض "2026-13-01" و"2026-02-31"
استبدل الأرقام بـ # باستخدام مجموعة الالتقاط
مدخل: تم استبدال "تم شحن الطلب 42" بـ /(\d+)/g →'#$1'
الإخراج: "تم شحن الطلب رقم 42"
المشاكل الشائعة
- تتطابق محددات الكمية الجشعة كثيرًا: '<.*>' في '<a><b>' يتطابق مع السلسلة بأكملها '<a><b>' بدلاً من '<a>'. استخدم '<.*?>' (كسول) لمطابقة '<a>' أولاً.
- التراجع الكارثي: محددات الكمية المتداخلة مثل (a+)+b عند الإدخال "aaaaaaaaaaaaaaaa!" يمكن أن يستغرق وقتا أسيا. أعد كتابة النموذج أو استخدم المجموعات الذرية/محددات الملكية عندما تكون مدعومة.
- نسيان علامة u لـ Unicode: /^.$/ يتطابق مع وحدة رمز واحدة، لذا تفشل الرموز التعبيرية مثل '😀' (وحدتي رمز) بدون علامة u. أضف u دائمًا عند مطابقة الأحرف النجمية.
- الخلط بين \b (حدود الكلمة) و\s (مسافة بيضاء): \b يطابق بين كلمة وحرف غير كلمة، لذلك يعمل في بداية/نهاية السلسلة أيضًا. \s يطابق فقط أحرف المسافات البيضاء الفعلية.
نصائح
- اختبر دائمًا التعبير العادي مقابل العينات المطابقة وغير المتطابقة في جهاز اختبار Regex الخاص بنا قبل تضمينه في رمز الإنتاج - من السهل تفويت حالات الحافة.
- تفضيل فئات الأحرف [a-z] على التناوب (a|b|...|z) للأحرف المفردة - تكون الفئات أسرع وأكثر وضوحًا.
- استخدم مجموعات غير ملتقطة (؟:...) عندما لا تحتاج إلى القيمة الملتقطة — الالتقاط له تكلفة أداء صغيرة ويؤدي إلى تشويش مصفوفة النتائج.
- قم بتجميع التعبير العادي مرة واحدة باستخدام RegExp() الجديد أو النطاق الحرفي في الوحدة النمطية، وليس داخل حلقة فعالة - حيث تؤدي إعادة ترجمة نفس النمط في كل تكرار إلى إهدار وحدة المعالجة المركزية.