Expressions régulières en TypeScript : de la théorie à la pratique
\nLes expressions régulières (RegExp) sont un outil puissant pour rechercher, remplacer et valider des chaînes de caractères. En TypeScript, elles fonctionnent comme en JavaScript, mais ajoutent un typage strict, ce qui simplifie le débogage et améliore la fiabilité du code. Dans cet article, nous allons analyser la syntaxe, les méthodes et des exemples concrets d'utilisation des expressions régulières en TypeScript.
\n\nCréation d'expressions régulières en TypeScript
\nEn TypeScript, il existe deux façons de créer une RegExp : littérale et via le constructeur. Les deux options sont typées et retournent un objet de type RegExp.
Syntaxe littérale
\nLa méthode la plus simple et la plus courante consiste à placer le motif entre barres obliques. Les indicateurs sont spécifiés après la deuxième barre oblique.
\n// Recherche du mot "hello" sans tenir compte de la casse\nconst pattern: RegExp = /hello/i;\nconsole.log(pattern.test('Hello World')); // true\n\nConstructeur RegExp
\nLe constructeur est pratique lorsque le motif est formé dynamiquement. Le premier argument est une chaîne avec le motif, le second est les indicateurs.
\nconst 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\nMéthodes principales de RegExp en TypeScript
\nTypeScript hérite de toutes les méthodes JavaScript pour travailler avec les regex. Examinons les plus populaires.
\n\ntest() — vérification de présence
\nLa méthode test() retourne true ou false. Utile pour la validation de formulaires.
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\nexec() — recherche détaillée
\nexec() retourne un tableau avec la correspondance, l'index et les groupes. S'il n'y a pas de correspondance — null.
const datePattern: RegExp = /(\\d{2})\\.(\\d{2})\\.(\\d{4})/;\nconst result: RegExpExecArray | null = datePattern.exec('Aujourd\'hui 15.03.2025');\nif (result) {\n console.log(`Jour : ${result[1]}, Mois : ${result[2]}, Année : ${result[3]}`);\n // Jour : 15, Mois : 03, Année : 2025\n}\n\nmatch() et matchAll() pour les chaînes
\nLa méthode match() est appelée sur une chaîne et prend une RegExp. Pour une recherche globale de toutes les correspondances, utilisez matchAll().
const text: string = 'Code 123, code 456, code 789';\nconst numbers: RegExpMatchArray | null = text.match(/\\d+/g);\nconsole.log(numbers); // ['123', '456', '789']\n\n// matchAll() retourne un itérateur\nconst matches: IterableIterator<RegExpMatchArray> = text.matchAll(/(\\d+)/g);\nfor (const match of matches) {\n console.log(`Nombre trouvé : ${match[1]}`);\n}\n\nExemples pratiques d'expressions régulières en TypeScript
\nAppliquons maintenant la théorie à des tâches réelles. Tous les exemples sont écrits en tenant compte du typage strict de TypeScript.
\n\nExemple 1 : Validation d'une adresse email
\nCréons une fonction qui vérifie la validité d'un email. Utilisons une expression régulière typée.
\nfunction 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\nExemple 2 : Extraction de nombres d'une chaîne
\nIl est souvent nécessaire d'obtenir tous les nombres d'un texte. Utilisons une recherche globale avec l'indicateur g.
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('Prix : 2500 roubles, réduction 300 roubles');\nconsole.log(result); // [2500, 300]\n\