🔍 ما هي التعبيرات النمطية (RegExp)؟ مقدمة سهلة لفهمها!
مرحباً بك في عالم القوة الخفية لجافا سكريبت! تخيل أن لديك صفحة مليئة بالنصوص، وتريد البحث عن جميع أرقام الهواتف، أو عناوين البريد الإلكتروني، أو حتى كلمات محددة. البحث اليدوي سيكون مستحيلاً. هنا يأتي دور التعبيرات النمطية (Regular Expressions أو RegExp).
التعبير النمطي (RegExp) هو ببساطة سلسلة نصية خاصة تصف "نمطاً" للبحث داخل نص آخر. فكر فيه على أنه "وصفة" أو "قالب" يخبر جافا سكريبت: "ابحث لي عن أي نص يطابق هذا الشكل الذي أعطيتك إياه".
لماذا هي مهمة جداً؟ لأنها تستخدم في:
- التحقق من صحة المدخلات (Validation): مثل التأكد من أن البريد الإلكتروني المكتوب في نموذج التسجيل مكتوب بشكل صحيح.
- البحث والاستبدال (Search/Replace): مثل استبدال جميع التواريخ في مستند من صيغة إلى أخرى.
- استخراج البيانات (Data Extraction): مثل جمع جميع أرقام الهواتف من مقالة طويلة.
✏️ كيف نكتب تعبيراً نمطياً في جافا سكريبت؟
هناك طريقتان رئيسيتان لإنشاء كائن RegExp:
1. باستخدام الليترال (الأكثر شيوعاً)
تكتب النمط بين شرطتين مائلتين /.../.
// نمط يبحث عن الحرف "a" في النص
let pattern1 = /a/;
// نمط يبحث عن كلمة "code" في النص
let pattern2 = /code/;
2. باستخدام المُنشئ (Constructor)
تستخدم new RegExp() وتمرر النمط كسلسلة نصية.
// نفس النمط السابق ولكن باستخدام المُنشئ
let pattern3 = new RegExp("a");
let pattern4 = new RegExp("code");
متى نستخدم المُنشئ؟ عندما يكون النمط نفسه متغيراً أو قادماً من مدخلات المستخدم (مع الحذر الشديد لأسباب أمنية).
🔤 أبسط الأنماط: البحث عن نص حرفي
أبسط أنواع التعبيرات النمطية هو البحث عن نص حرفي مطابق تماماً. إنه مثل استخدام Ctrl+F للبحث.
let myText = "Hello, welcome to Codex Academy!";
let pattern = /welcome/; // نمط للبحث عن كلمة "welcome"
// اختبار إذا كان النمط موجوداً في النص
let result = pattern.test(myText);
console.log(result); // المخرجات: true ✅
في المثال أعلاه، استخدمنا الدالة .test() التي ترجع true إذا وجدت النمط، و false إذا لم تجده.
⚙️ استخدام مُعدِّلات الأنماط (Flags)
المُعدِّلات هي أحرف خاصة نضعها بعد الشرطة المائلة الثانية /.../g لتغيير طريقة البحث. أشهرها:
i(ignore case): يجعل البحث غير حساس لحالة الأحرف (كبيرة أم صغيرة).g(global): يبحث عن جميع التطابقات، وليس فقط الأول.
let text = "Coding is COOL. I love to CODE.";
let patternWithoutFlag = /code/;
let patternWithIFlag = /code/i;
let patternWithGFlag = /code/g;
let patternWithBoth = /code/gi;
console.log(patternWithoutFlag.test(text)); // false (لأنه يبحث عن "code" الصغيرة فقط)
console.log(patternWithIFlag.test(text)); // true (يتجاهل الحالة، يجد "CODE")
🧪 طرق استخدام التعبيرات النمطية مع النصوص
هناك طريقتان رئيسيتان للتفاعل بين RegExp والنصوص (String):
1. regex.test(string) - للتحقق من الوجود
كما رأينا، ترجع true أو false.
let emailPattern = /gmail/;
let userEmail = "student@codexacademy.com";
let isValid = emailPattern.test(userEmail);
console.log(isValid); // المخرجات: false (لأن البريد لا يحتوي على "gmail")
2. string.match(regex) - لجلب التطابقات نفسها
ترجع مصفوفة تحتوي على النصوص التي تطابقت مع النمط.
let story = "The cat sat on the mat with another cat.";
let catPattern = /cat/g; // ابحث عن جميع كلمات "cat"
let foundCats = story.match(catPattern);
console.log(foundCats); // المخرجات: ['cat', 'cat']
console.log(foundCats.length); // المخرجات: 2
💡 مثال عملي بسيط: التحقق من وجود كلمة
لنطبق ما تعلمناه في مثال واقعي: التحقق مما إذا كانت مقالة تتحدث عن جافا سكريبت.
// محاكاة لمحتوى مقالة
let articleContent = "In this tutorial, we will learn the basics of JavaScript. JavaScript is powerful.";
// نمط للبحث عن كلمة "JavaScript"
let jsPattern = /JavaScript/;
// التحقق
if (jsPattern.test(articleContent)) {
console.log("✅ هذه المقالة تتحدث عن جافا سكريبت!");
} else {
console.log("❌ هذه المقالة لا تتحدث عن جافا سكريبت.");
}
// المخرجات: ✅ هذه المقالة تتحدث عن جافا سكريبت!
🎓 اختبر نفسك
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال