التعبيرات المنتظمة في JavaScript مع أمثلة لـ Node.js
التعبيرات المنتظمة (regex أو regexp) هي أداة قوية للبحث والاستبدال واستخراج المعلومات النصية. في JavaScript و Node.js، تُستخدم في كل مكان: من التحقق من صحة النماذج إلى تحليل السجلات ومعالجة الطلبات. ستساعدك هذه المقالة على إتقان بناء جملة التعبيرات المنتظمة من خلال أمثلة عملية يمكنك تشغيلها فورًا في Node.js.
1. إنشاء التعبيرات المنتظمة في JavaScript
في JavaScript، هناك طريقتان لإنشاء تعبير منتظم:
- بناء الجملة الحرفي — يتم وضع النمط بين شرطتين مائلتين
/pattern/flags. يُوصى به للأنماط الثابتة. - منشئ RegExp —
new RegExp('pattern', 'flags'). يُستخدم إذا كان النمط يُنشأ ديناميكيًا.
// الطريقة الحرفيةconst regexLiteral = /hello/i;
// منشئ RegExpconst pattern = 'hello';const regexConstructor = new RegExp(pattern, 'i');
console.log(regexLiteral.test('Hello World')); // trueconsole.log(regexConstructor.test('Hello World')); // true2. الطرق الأساسية للعمل مع التعبيرات المنتظمة
في Node.js والمتصفحات، تتوفر أربع طرق رئيسية للعمل مع regex. سنشرح كل منها مع أمثلة.
الطريقة test()
تتحقق مما إذا كانت السلسلة تحتوي على تطابق مع النمط. تُرجع true أو false.
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;console.log(emailPattern.test('user@example.com')); // trueconsole.log(emailPattern.test('invalid-email')); // falseالطريقة exec()
تبحث عن تطابق وتُرجع مصفوفة تحتوي على التفاصيل (التطابق نفسه، المجموعات، الفهرس، السلسلة المدخلة). إذا لم يكن هناك تطابق — تُرجع null.
const text = 'السعر: 1500 روبل، الخصم: 300 روبل';const regex = /(\\d+)\\sروبل/g;let match;
while ((match = regex.exec(text)) !== null) { console.log(`تم العثور على: ${match[1]} روبل`); // الإخراج: "تم العثور على: 1500 روبل" // الإخراج: "تم العثور على: 300 روبل"}الطريقة match()
تُستدعى على السلسلة. تُرجع مصفوفة من التطابقات (مع العلم g) أو معلومات مفصلة (بدون العلم g).
const logLine = 'خطأ 404: الصفحة غير موجودة';const errorRegex = /(\\d{3}):\\s(.+)/;const result = logLine.match(errorRegex);
console.log(result[0]); // '404: الصفحة غير موجودة'console.log(result[1]); // '404'console.log(result[2]); // 'الصفحة غير موجودة'الطريقة replace()
تستبدل التطابقات بسلسلة محددة أو نتيجة دالة. مناسبة تمامًا لتنسيق البيانات.
const phone = '+7 (999) 123-45-67';const cleanPhone = phone.replace(/[\\s\\-\\(\\)\\+]/g, '');console.log(cleanPhone); // '79991234567'
// الاستبدال باستخدام المجموعاتconst date = '2024-01-15';const formattedDate = date.replace(/(\\d{4})-(\\d{2})-(\\d{2})/, '$3.$2.$1');console.log(formattedDate); // '15.01.2024'3. الرموز والأعلام الأساسية للتعبيرات المنتظمة
للعمل بكفاءة مع regex، تحتاج إلى فهم الرموز الفوقية والأساسية. إليك أهمها:
رموز البحث
.— أي حرف (باستثناء سطر جديد)\\d— رقم (0-9)\\w— حرف أو رقم أو شرطة سفلية\\s— حرف مسافة بيضاء^— بداية السلسلة$— نهاية السلسلة*— 0 أو أكثر من التكرارات+— 1 أو أكثر من التكرارات?— 0 أو 1 تكرار{n,m}— من n إلى m تكرار
الأعلام
g— بحث عام (جميع التطابقات)i— بحث غير حساس لحالة الأحرفm— بحث متعدد الأسطر