التعبيرات المنتظمة في TypeScript: الصياغة، الطرق والأمثلة
التعبيرات المنتظمة (regex) هي أداة قوية للعمل مع النصوص. في TypeScript، لا تسمح فقط بالبحث والاستبدال والتحقق من النص، بل تتيح أيضًا الحصول على كتابة صارمة للنتائج. في هذه المقالة، سنشرح جميع جوانب العمل مع RegExp في TypeScript: من الصياغة الأساسية إلى التقنيات المتقدمة مع أمثلة الكود.
1. إنشاء التعبيرات المنتظمة في TypeScript
في TypeScript، كما في JavaScript، هناك طريقتان لإنشاء تعبير منتظم:
الصياغة الحرفية (Literal Syntax)
الطريقة الأكثر شيوعًا وملاءمة هي استخدام الشرط المائلة:
const pattern: RegExp = /hello/gi;هنا g تعني البحث العام، i تعني عدم حساسية حالة الأحرف. النوع RegExp يُستنتج تلقائيًا، ولكن يمكن تحديده صراحة لتحسين readability.
منشئ RegExp (Constructor)
يُستخدم عندما يتم تشكيل النمط ديناميكيًا:
const searchTerm: string = "world";const dynamicPattern: RegExp = new RegExp(searchTerm, "gi");الوسيطة الثانية هي سلسلة تحتوي على الأعلام. نوع القيمة المُرجعة هو RegExp.
2. الطرق الأساسية لـ RegExp و String
يرث TypeScript جميع طرق JavaScript، لكنه يضيف إليها كتابة صارمة. دعنا نستعرض الطرق الرئيسية مع الأمثلة.
طريقة test()
تتحقق مما إذا كان هناك تطابق في السلسلة. تُرجع قيمة boolean.
const emailRegex: RegExp = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;const email: string = "user@example.com";
const isValid: boolean = emailRegex.test(email);console.log(isValid); // trueطريقة exec()
تبحث عن تطابق وتُعيد معلومات مفصلة. تُرجع RegExpExecArray | null.
const text: string = "السعر: 1500 روبل، الخصم: 200 روبل";const pricePattern: RegExp = /(\\d+)\\s*روبل/g;
let match: RegExpExecArray | null;while ((match = pricePattern.exec(text)) !== null) { console.log(`تم العثور على: ${match[0]}, الرقم: ${match[1]}`);}// الإخراج:// تم العثور على: 1500 روبل, الرقم: 1500// تم العثور على: 200 روبل, الرقم: 200طريقة match() للسلسلة
تعمل بشكل مشابه لـ exec()، لكنها تُستدعى على السلسلة. تُرجع RegExpMatchArray | null.
const phone: string = "جهات الاتصال: +7 (999) 123-45-67";const phoneRegex: RegExp = /\\+7\\s*\\(\\d{3}\\)\\s*\\d{3}-\\d{2}-\\d{2}/;
const result: RegExpMatchArray | null = phone.match(phoneRegex);if (result) { console.log(`تم العثور على هاتف: ${result[0]}`); // تم العثور على هاتف: +7 (999) 123-45-67}طريقة replace()
تستبدل التطابقات بسلسلة جديدة. تُرجع string. تدعم استخدام callback للاستبدالات المعقدة.
function formatDate(input: string): string { const datePattern: RegExp = /(\\d{4})-(\\d{2})-(\\d{2})/; return input.replace(datePattern, "$3.$2.$1");}
const isoDate: string = "2025-03-10";const formatted: string = formatDate(isoDate);console.log(formatted); // "10.03.2025"طريقة split()
تقسم السلسلة بناءً على تعبير منتظم. تُرجع string[].
const data: string = "تفاحة;كمثرى;برتقال;موز";const items: string[] = data.split(/;\\s*/);console.log(items); // ["تفاحة", "كمثرى", "برتقال", "موز"]3. الأعلام وتركيباتها
تتحكم الأعلام في سلوك التعبير المنتظم. في TypeScript، يتم تحديدها إما في النمط الحرفي أو كوسيطة ثانية للمنشئ.
| العلم | الوصف | مثال |
|---|---|---|
g | البحث العام (جميع التطابقات) | /ab/g |
i | عدم حساسية حالة الأحرف |