التعبيرات النمطية في JavaScript مع أمثلة: عمليًا

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التعبيرات النمطية في JavaScript مع أمثلة: عمليًا

\n\n

التعبيرات النمطية (RegExp) هي أداة قوية للبحث والاستبدال والتحقق من صحة النصوص. في JavaScript، خاصة في بيئة Node.js، تُستخدم في كل مكان: من تحليل السجلات إلى التحقق من النماذج. في هذه المقالة، سنشرح الصياغة والطرق ونكتب أمثلة عملية يمكنك استخدامها فورًا في مشاريعك.

\n\n

1. أساسيات الصياغة وإنشاء 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
    \n
  • . — أي حرف، باستثناء السطر الجديد
  • \n
  • \\d — رقم (0-9)
  • \n
  • \\w — حرف أو رقم أو شرطة سفلية
  • \n
  • \\s — حرف مسافة (مسافة، علامة تبويب، سطر جديد)
  • \n
  • ^ — بداية السطر
  • \n
  • $ — نهاية السطر
  • \n
  • [] — فئة أحرف (مثل [a-z] — جميع الأحرف الصغيرة)
  • \n
  • () — مجموعة التقاط
  • \n
  • | — OR منطقي
  • \n
\n\n

2. الطرق الأساسية للعمل مع التعبيرات النمطية

\n\n

في JavaScript، هناك عدة طرق تعمل مع RegExp. دعنا نستعرضها بأمثلة عملية.

\n\n

2.1. test() — التحقق من التطابق

\n

تعيد الطريقة true أو false. مثالية للتحقق من الصحة.

\n\n
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\n

2.2. exec() — البحث مع التفاصيل

\n

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

\n\n
const 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\n

2.3. match() — البحث في السلسلة النصية

\n

طريقة سلسلة نصية تعيد مصفوفة من التطابقات. مع العلامة g — جميع التطابقات، بدونها — الأولى مع المجموعات.

\n\n
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\n

2.4. replace() — استبدال النص

\n

تسمح باستبدال التطابقات بسلسلة نصية جديدة. تدعم الرموز الخاصة مثل $1 لمجموعات الالتقاط.

\n\n
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                

المدونات

توصيات الكتب