التعبيرات النمطية في TypeScript مع أمثلة: دليل كامل

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

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

ابدأ الدورة

التعبيرات النمطية في TypeScript: من النظرية إلى التطبيق

\n

التعبيرات النمطية (RegExp) هي أداة قوية للبحث والاستبدال والتحقق من صحة السلاسل النصية. في TypeScript، تعمل تمامًا كما في JavaScript، ولكنها تضيف كتابة صارمة، مما يبسط التصحيح ويزيد من موثوقية الكود. في هذه المقالة، سنشرح الصياغة والطرق والأمثلة الواقعية لاستخدام التعبيرات النمطية في TypeScript.

\n\n

إنشاء التعبيرات النمطية في TypeScript

\n

في TypeScript، توجد طريقتان لإنشاء RegExp: الطريقة الحرفية وعبر المُنشئ. كلا الخيارين مكتوبان ويعيدان كائنًا من النوع RegExp.

\n\n

الصياغة الحرفية

\n

أبسط طريقة وأكثرها استخدامًا هي وضع النمط بين شرطتين مائلتين. تُحدد العلامات بعد الشرطة المائلة الثانية.

\n
// البحث عن كلمة "hello" بدون مراعاة حالة الأحرف\nconst pattern: RegExp = /hello/i;\nconsole.log(pattern.test('Hello World')); // true
\n\n

مُنشئ RegExp

\n

المُنشئ مفيد عندما يتم تكوين النمط ديناميكيًا. الوسيطة الأولى هي سلسلة النمط، والثانية هي العلامات.

\n
const searchTerm: string = 'TypeScript';\nconst dynamicPattern: RegExp = new RegExp(searchTerm, 'gi');\nconsole.log('I love TypeScript and TypeScript is great'.match(dynamicPattern));\n// ['TypeScript', 'TypeScript']
\n\n

الطرق الأساسية لـ RegExp في TypeScript

\n

ترث TypeScript جميع طرق JavaScript للعمل مع التعبيرات النمطية. دعنا نلقي نظرة على الأكثر شيوعًا.

\n\n

test() — التحقق من الوجود

\n

الطريقة test() تُرجع true أو false. مفيدة للتحقق من صحة النماذج.

\n
const emailRegex: RegExp = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\nconst email: string = 'user@example.com';\nconsole.log(emailRegex.test(email)); // true
\n\n

exec() — بحث تفصيلي

\n

exec() تُرجع مصفوفة تحتوي على التطابق والفهرس والمجموعات. إذا لم يكن هناك تطابق، تُرجع null.

\n
const datePattern: RegExp = /(\\d{2})\\.(\\d{2})\\.(\\d{4})/;\nconst result: RegExpExecArray | null = datePattern.exec('اليوم 15.03.2025');\nif (result) {\n  console.log(`اليوم: ${result[1]}, الشهر: ${result[2]}, السنة: ${result[3]}`);\n  // اليوم: 15, الشهر: 03, السنة: 2025\n}
\n\n

match() و matchAll() للسلاسل النصية

\n

الطريقة match() تُستدعى على السلسلة النصية وتستقبل RegExp. للبحث الشامل عن جميع التطابقات، استخدم matchAll().

\n
const text: string = 'الرمز 123, الرمز 456, الرمز 789';\nconst numbers: RegExpMatchArray | null = text.match(/\\d+/g);\nconsole.log(numbers); // ['123', '456', '789']\n\n// matchAll() تُرجع مكررًا\nconst matches: IterableIterator<RegExpMatchArray> = text.matchAll(/(\\d+)/g);\nfor (const match of matches) {\n  console.log(`تم العثور على رقم: ${match[1]}`);\n}
\n\n

أمثلة عملية للتعبيرات النمطية في TypeScript

\n

الآن سنطبق النظرية على مهام حقيقية. جميع الأمثلة مكتوبة مع مراعاة الكتابة الصارمة في TypeScript.

\n\n

مثال 1: التحقق من صحة عنوان البريد الإلكتروني

\n

لننشئ دالة تتحقق من صحة البريد الإلكتروني. سنستخدم تعبيرًا نمطيًا مكتوبًا.

\n
function isValidEmail(email: string): boolean {\n  const emailRegex: RegExp = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n  return emailRegex.test(email);\n}\n\nconsole.log(isValidEmail('test@mail.ru'));   // true\nconsole.log(isValidEmail('invalid-email'));  // false
\n\n

مثال 2: استخراج الأرقام من سلسلة نصية

\n

غالبًا ما نحتاج إلى الحصول على جميع الأرقام من النص. نستخدم البحث الشامل مع العلامة g.

\n
function extractNumbers(text: string): number[] {\n  const numberPattern: RegExp = /\\d+/g;\n  const matches: RegExpMatchArray | null = text.match(numberPattern);\n  return matches ? matches.map(Number) : [];\n}\n\nconst result: number[] = extractNumbers('السعر: 2500 ريال, الخصم 300 ريال');\nconsole.log(result); // [2500, 300]
\n\

المدونات

توصيات الكتب