Introduction aux expressions régulières JavaScript
\nLes expressions régulières (regex ou regexp) sont un outil puissant pour rechercher, remplacer et valider des chaînes de caractères selon un motif donné. En JavaScript (et Node.js), elles sont implémentées via l'objet natif RegExp.
Pour un débutant, la syntaxe des regex peut sembler intimidante, mais il s'agit en réalité d'un langage de description de motifs. En maîtrisant les constructions de base, vous pourrez :
\n- \n
- Valider des emails, téléphones, URL \n
- Extraire des données d'un texte (parsing) \n
- Remplacer des sous-chaînes selon des règles complexes \n
- Filtrer et traiter les saisies utilisateur \n
Dans cet article, nous allons étudier les expressions régulières en JavaScript avec des exemples sur Node.js. Tous les exemples peuvent être exécutés dans la console ou dans un environnement d'exécution.
\n\nCréation d'une expression régulière en JS
\nEn JavaScript, il existe deux façons de créer une regex :
\n1. Syntaxe littérale (recommandée)
\nconst pattern = /hello/; // Recherche le mot "hello"\nLe motif est placé entre deux barres obliques. Après la barre oblique fermante, vous pouvez spécifier des drapeaux (par exemple, i pour une recherche insensible à la casse).
2. Constructeur RegExp
\nconst pattern = new RegExp('hello'); // Équivalent à /hello/\nUtilisé lorsque le motif est dynamique (construit à partir d'une variable).
\n\nDrapeaux des expressions régulières
\n- \n
i— ignorer la casse (/hello/itrouvera "Hello", "HELLO") \ng— recherche globale (trouve toutes les correspondances, pas seulement la première) \nm— mode multiligne (modifie le comportement des ancres^et$) \ns— le point correspond au caractère de saut de ligne \nu— support Unicode \ny— recherche adhésive (recherche uniquement à partir de la position lastIndex) \n
const regex = /javascript/gi; // Recherche "javascript" globalement et sans tenir compte de la casse\n\nMéthodes principales pour travailler avec les regex en JavaScript
\nExaminons les méthodes clés utilisées avec les expressions régulières.
\n\ntest() — vérification de la présence d'un motif
\nRetourne true ou false. La méthode la plus rapide pour la validation.
const emailPattern = /^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}$/i;\nconsole.log(emailPattern.test('user@example.com')); // true\nconsole.log(emailPattern.test('invalid-email')); // false\n\nexec() — recherche avec détails
\nRetourne un tableau avec la correspondance et les groupes. Avec le drapeau g, il mémorise la position.
const str = 'Prix : 100 €, réduction : 20 €';\nconst pricePattern = /(\\d+)\\s€/g;\nlet match;\nwhile ((match = pricePattern.exec(str)) !== null) {\n console.log(`Trouvé : ${match[0]}, nombre : ${match[1]}`);\n}\n// Affichage :\n// Trouvé : 100 €, nombre : 100\n// Trouvé : 20 €, nombre : 20\n\nmatch() — recherche dans une chaîne
\nMéthode de chaîne. Sans le drapeau g, retourne la première correspondance (comme exec). Avec le drapeau g, retourne un tableau de toutes les correspondances.
const text = 'JS — c\'est JavaScript, ne confondez pas avec Java.';\nconst jsMatches = text.match(/Java\\w*/g);\nconsole.log(jsMatches); // ['JavaScript', 'Java']\n\nreplace() — remplacement selon un motif
\nRemplace les correspondances par une nouvelle chaîne. Prend en charge les caractères spéciaux ($1, $&).
const phone = '+7 (123) 456-78-90';\nconst cleanPhone = phone.replace(/[\\s\\(\\)\\-]/g, '');\nconsole.log(cleanPhone); // +71234567890\n\n// Remplacement avec utilisation de groupes\nconst date = '2024-03-15';\nconst reversed = date.replace(/(\\d{4})-(\\d{2})-(\\d{2})/, '$3.$2.$1');\nconsole.log(reversed); // 15.03.2024\n\nsearch() — index de la première correspondance
\nconst index = 'Hello world'.search(/world/);\nconsole.log(index); // 6