Testeur d'expressions régulières
Saisissez un motif d'expression régulière et un texte de test pour surligner les correspondances et lister les valeurs des groupes de capture. Prend en charge les drapeaux g/i/m/s/u via le RegExp natif de JavaScript.
Motifs d'expressions régulières courants
| Usage | Motif | Description |
|---|---|---|
| Adresse e-mail | ^[\w.+-]+@[\w-]+\.[\w.-]+$ | Correspond à un format d'e-mail simplifié composé d'un nom d'utilisateur et d'un domaine séparés par @ (non totalement conforme à la RFC). |
| Numéro de téléphone (France) | ^0[1-9](\s?\d{2}){4}$ | Correspond à un numéro de téléphone français à 10 chiffres commençant par 0, avec des espaces optionnels tous les deux chiffres. |
| URL | https?:\/\/[\w.-]+(?:\/[\w\-./?%&=]*)? | Extrait les chaînes d'URL commençant par http:// ou https://, y compris le chemin et les paramètres de requête. |
| Code postal | ^\d{5}$ | Correspond à un code postal français à 5 chiffres. |
| Code couleur hexadécimal | ^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$ | Correspond aux couleurs hexadécimales CSS au format complet #RRVVBB ou abrégé #RVB. |
| Chiffres uniquement | ^[0-9]+$ | Vérifie que la chaîne entière n'est composée que de chiffres (0-9). |
Astuces
- Le champ
/drapeauxaffiché à côté du motif permet de voir en un coup d'œil quelle combinaison de drapeaux est actuellement active. - Seules les parties entourées de
()comptent comme groupes de capture. Utilisez un groupe non capturant(?:...)si vous voulez juste grouper une condition sans encombrer la liste des groupes. - Sans le drapeau g, seule la première correspondance est trouvée. Activez-le si vous voulez compter toutes les occurrences dans le texte.
- Le bouton « Insérer un exemple » charge un cas d'extraction d'e-mail, un bon point de départ pour comprendre le comportement des groupes de capture.
- Tout le traitement se fait entièrement dans votre navigateur : le motif et le texte de test saisis ne sont jamais envoyés à un serveur.
Questions fréquentes
[abc], \d, +, *, etc.) est largement partagée, mais la syntaxe des groupes nommés, la prise en charge du lookahead/lookbehind et les drapeaux disponibles varient subtilement d'un langage à l'autre. Cet outil suit la spécification RegExp de JavaScript et ne garantit donc pas un comportement identique ailleurs.*, +, ?) sans rien devant, ou une classe de caractères invalide. Le message d'erreur donne généralement un indice ; vérifiez donc l'équilibre des parenthèses et l'échappement des caractères spéciaux (comme \. ou \().
Anecdote — Ce qui se passe à l'intérieur d'un moteur d'expressions régulières
Les expressions régulières remontent à la théorie des « langages réguliers » proposée par le mathématicien Stephen Kleene dans les années 1950. Des outils Unix précoces comme l'éditeur de texte ed et la commande grep (abréviation de « globally search a Regular Expression and Print ») ont adopté cette théorie comme implémentation pratique, ce qui explique la diffusion rapide du concept dans les outils de traitement de texte. Le nom « grep » lui-même provient d'une opération d'expression régulière, ce qui est plutôt symbolique.
Le moteur RegExp de JavaScript effectue la correspondance en interne selon une stratégie de retour en arrière (backtracking) : il essaie chaque élément du motif dans l'ordre et, si une partie ultérieure échoue, revient en arrière pour tenter une autre alternative. Cette flexibilité a un revers : des motifs comme (a+)+b combinés à une longue chaîne non correspondante peuvent faire croître le nombre de tentatives de façon exponentielle, un phénomène appelé « retour en arrière catastrophique », capable de figer un navigateur ou un serveur. Testez toujours les motifs complexes avec des entrées variées avant de les déployer en production.
Un objet d'expression régulière avec le drapeau global (g) conserve en interne un curseur appelé lastIndex, et chaque appel à exec() reprend la recherche à partir de cette position. Réutiliser le même objet d'expression régulière pour des recherches sans rapport peut laisser ce curseur dans un état inattendu ; c'est pourquoi cet outil crée à chaque fois une nouvelle instance de RegExp, afin d'éviter de reporter cet état résiduel.
Les groupes de capture nommés ((?<nom>...)) ont été ajoutés dans ECMAScript 2018 et constituent une fonctionnalité relativement récente. Faire référence à un groupe par son nom plutôt que par son numéro améliore considérablement la lisibilité des motifs complexes, ce qui est particulièrement utile lors de l'analyse de dates, où il est important de savoir ce que représente chaque groupe.