التعبيرات النمطية في JavaScript مع أمثلة: عمليًا
\n\nالتعبيرات النمطية (RegExp) هي أداة قوية للبحث والاستبدال والتحقق من صحة النصوص. في JavaScript، خاصة في بيئة Node.js، تُستخدم في كل مكان: من تحليل السجلات إلى التحقق من النماذج. في هذه المقالة، سنشرح الصياغة والطرق ونكتب أمثلة عملية يمكنك استخدامها فورًا في مشاريعك.
\n\n1. أساسيات الصياغة وإنشاء RegExp
\n\nفي JavaScript، يمكن إنشاء تعبير نمطي بطريقتين: الحرفي (Literal) والمنشئ (Constructor). الحرفي مناسب للأنماط الثابتة، والمنشئ للأنماط الديناميكية.
\n\n// الحرفي (موصى به)\nconst regexLiteral = /hello/gi;\n\n// المنشئ (للأنماط الديناميكية)\nconst pattern = "hello";\nconst flags = "gi";\nconst regexConstructor = new RegExp(pattern, flags);\n\nالعلامات (المعدلات):
\n- \n
g— بحث عام (يجد جميع التطابقات، وليس الأولى فقط) \n i— بحث غير حساس لحالة الأحرف \n m— وضع متعدد الأسطر (تعمل المراسي^و$لكل سطر) \n s— يسمح للنقطة.بمطابقة حرف السطر الجديد \n u— يتيح الدعم الكامل لـ Unicode \n
الرموز الوصفية الأساسية:
\n- \n
.— أي حرف، باستثناء السطر الجديد \n \\d— رقم (0-9) \n \\w— حرف أو رقم أو شرطة سفلية \n \\s— حرف مسافة (مسافة، علامة تبويب، سطر جديد) \n ^— بداية السطر \n $— نهاية السطر \n []— فئة أحرف (مثل[a-z]— جميع الأحرف الصغيرة) \n ()— مجموعة التقاط \n |— OR منطقي \n
2. الطرق الأساسية للعمل مع التعبيرات النمطية
\n\nفي JavaScript، هناك عدة طرق تعمل مع RegExp. دعنا نستعرضها بأمثلة عملية.
\n\n2.1. test() — التحقق من التطابق
\nتعيد الطريقة true أو false. مثالية للتحقق من الصحة.
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nconst emails = ["user@example.com", "invalid-email", "test@domain.co.uk"];\n\nemails.forEach(email => {\n console.log(`${email}: ${emailPattern.test(email)}`);\n});\n// user@example.com: true\n// invalid-email: false\n// test@domain.co.uk: true\n\n2.2. exec() — البحث مع التفاصيل
\nتعيد مصفوفة تحتوي على التطابق ومجموعات الالتقاط. مفيدة لاستخراج البيانات.
\n\nconst logLine = "ERROR: 2023-10-15 14:30:00 - Server crash";\nconst logPattern = /^(ERROR|WARN|INFO): (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}) - (.+)$/;\nconst result = logPattern.exec(logLine);\n\nif (result) {\n console.log(`المستوى: ${result[1]}`);\n console.log(`التاريخ: ${result[2]}`);\n console.log(`الرسالة: ${result[3]}`);\n}\n// المستوى: ERROR\n// التاريخ: 2023-10-15 14:30:00\n// الرسالة: Server crash\n\n2.3. match() — البحث في السلسلة النصية
\nطريقة سلسلة نصية تعيد مصفوفة من التطابقات. مع العلامة g — جميع التطابقات، بدونها — الأولى مع المجموعات.
const text = "هاتف: +7(999)123-45-67, +7(495)765-43-21";\nconst phonePattern = /\\+7\\(\\d{3}\\)\\d{3}-\\d{2}-\\d{2}/g;\nconst phones = text.match(phonePattern);\n\nconsole.log(phones);\n// ['+7(999)123-45-67', '+7(495)765-43-21']\n\n2.4. replace() — استبدال النص
\nتسمح باستبدال التطابقات بسلسلة نصية جديدة. تدعم الرموز الخاصة مثل $1 لمجموعات الالتقاط.
const messyDate = "2023/10/15";\nconst cleanDate = messyDate.replace(/(\\d{4})\\/(\\d{2})\\/(\\d{2})/, "$3.$2.$1");\nconsole.log(cleanDate); // 15.10.2023\n\n