التعبيرات المنتظمة في JavaScript: دليل شامل مع أمثلة
التعبيرات المنتظمة (regexp أو regex) هي أداة قوية للبحث والاستبدال والتحقق من صحة البيانات النصية. في JavaScript، وخاصة في بيئة Node.js، تُستخدم التعبيرات المنتظمة في كل مكان: من معالجة السجلات وتحليل عناوين URL إلى التحقق من صحة النماذج وتنسيق النص. في هذه المقالة، سنشرح أساسيات العمل مع التعبيرات المنتظمة في JavaScript، ونتناول بناء الجملة والطرق، ونقدم أمثلة عملية لـ Node.js.
إنشاء التعبيرات المنتظمة في JavaScript
في JavaScript، هناك طريقتان لإنشاء تعبير منتظم:
- الكتابة الحرفية — الطريقة الأكثر ملاءمة وانتشارًا:
/pattern/flags. - منشئ RegExp — يُستخدم عندما يتم إنشاء النمط ديناميكيًا:
new RegExp('pattern', 'flags').
أمثلة:
// الكتابة الحرفيةconst regexLiteral = /hello/i; // العلامة i — تجاهل حالة الأحرف
// منشئ RegExpconst pattern = 'hello';const regexConstructor = new RegExp(pattern, 'i');
console.log(regexLiteral.test('Hello, world!')); // trueconsole.log(regexConstructor.test('HELLO')); // trueالعلامات الرئيسية (المعدلات)
i— تجاهل حالة الأحرف (case-insensitive).g— البحث العام (يبحث عن جميع التطابقات، وليس الأولى فقط).m— الوضع متعدد الأسطر (تعمل المراسي^و$لكل سطر).s— وضع "dotall" (تتضمن النقطة.حرف السطر الجديد).u— دعم كامل لـ Unicode.y— وضع "sticky" (البحث من الموضع الحالي).
طرق التعبيرات المنتظمة في JavaScript
في JavaScript، تعمل التعبيرات المنتظمة مع عدة طرق للسلاسل النصية و RegExp نفسه.
طريقة test()
تتحقق مما إذا كان هناك تطابق في السلسلة النصية. تُرجع true أو false.
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;console.log(emailRegex.test('user@example.com')); // trueconsole.log(emailRegex.test('invalid-email')); // falseطريقة exec()
تُجري بحثًا وتُعيد مصفوفة بالنتائج أو null. مفيدة لاستخراج المجموعات.
const urlRegex = /https?:\\/\\/([^\\/]+)\\/(.*)/;const url = 'https://pythonlib.ru/regular-expressions';const match = urlRegex.exec(url);
if (match) { console.log('النطاق:', match[1]); // pythonlib.ru console.log('المسار:', match[2]); // regular-expressions}طرق السلاسل النصية التي تعمل مع regexp
str.match(regex)— تُعيد مصفوفة من التطابقات (أوnull).str.matchAll(regex)— تُعيد مكررًا لجميع التطابقات (مع المجموعات).str.replace(regex, replacement)— تستبدل التطابقات.str.search(regex)— تُعيد فهرس أول تطابق (-1 إذا لم يوجد).str.split(regex)— تقسم السلسلة النصية بناءً على التعبير المنتظم.
const text = 'الكود: 12345، القطعة: ABC-6789';
// match — العثور على جميع الأرقامconst numbers = text.match(/\\d+/g);console.log(numbers); // ['12345', '6789']
// replace — استبدال الشرطة بنقطتينconst cleaned = text.replace(/-/g, ':');console.log(cleaned); // 'الكود: 12345، القطعة: ABC:6789'
// split — التقسيم بناءً على الفواصل والمسافاتconst parts = text.split(/,\\s*/);console.log(parts); // ['الكود: 12345', 'القطعة: ABC-6789']الأنماط الأساسية والأحرف الخاصة
لإنشاء أنماط دقيقة، تُستخدم الرموز الوصفية والمحددات الكمية. إليك أهمها: