Testeur d'expressions régulières
Les expressions régulières (regex) sont des motifs pour la correspondance de texte. Cet outil analyse la syntaxe regex, explique les composants du motif et fournit une zone de test pour essayer les correspondances contre un texte d'exemple. Prend en charge les formats regex JavaScript, PCRE et Python.
Specifications
Cas d'utilisation courants
- Déboguer pourquoi une regex ne correspond pas au texte attendu
- Apprendre la syntaxe regex en voyant les explications
- Tester les motifs avant de les ajouter au code
- Valider les motifs d'entrée pour les champs de formulaire
- Extraire des données de texte structuré (logs, CSV, HTML)
Fonctionnalites
- Détecter le format regex (JavaScript /motif/drapeaux, PCRE #motif#, Python r"motif")
- Expliquer les composants du motif en langage courant
- Tester contre un texte d'exemple avec mise en surbrillance des correspondances
- Mode correspondance unique ou recherche de toutes les correspondances
- Afficher les groupes de capture et leur contenu
- Affichage des groupes de capture nommés
- Afficher les positions et indices de correspondance
- Affichage du temps d'exécution de la regex
- Badges de fonctionnalités du motif (ancres, quantificateurs, etc.)
- Avertissements de motif
- Bibliothèque de motifs courants (e-mail, URL, téléphone, etc.)
Exemples
Conseils
- Utilisez des testeurs en ligne pour déboguer les motifs complexes avant la production.
- Échappez les caractères spéciaux (. ^ $ * + ? { } [ ] \ | ( )) avec un antislash.
- Les groupes de capture nommés (?<nom>...) rendent les correspondances plus lisibles.
- Le drapeau g trouve toutes les correspondances ; sans lui, seule la première correspondance est retournée.
- Soyez prudent avec les quantificateurs gourmands (* +) ; utilisez les non-gourmands (*? +?) quand c'est approprié.
Comprendre Testeur d'expressions régulières
Les expressions régulières (regex) sont un langage de correspondance de motifs utilisé dans pratiquement tous les langages de programmation, éditeurs de texte et outils en ligne de commande. Une regex définit un motif de recherche en utilisant une combinaison de caractères littéraux et de métacaractères qui correspondent à des classes de chaînes. Elles sont essentielles pour la validation des entrées, l'extraction de texte, les opérations de recherche-remplacement et l'analyse des logs.
La syntaxe de base comprend les classes de caractères ([a-z], \\d, \\w, \\s), les quantificateurs (*, +, ?, {n,m}), les ancres (^, $, \\b), l'alternance (|) et le groupement avec des parenthèses. Les groupes capturés extraient les sous-chaînes correspondantes et permettent les références arrière. Les assertions avant (?=...) et les assertions arrière (?<=...) correspondent à des positions sans consommer de caractères, permettant des assertions complexes sur le contexte environnant.
La variante regex de JavaScript a ses propres drapeaux spécifiques : g (global), i (insensible à la casse), m (multiligne), s (dotAll), u (Unicode) et y (sticky). Le drapeau u est de plus en plus important pour gérer correctement le texte Unicode, car sans lui, les motifs peuvent ne pas correspondre correctement aux caractères multi-octets. Les groupes de capture nommés (?<nom>...) améliorent la lisibilité par rapport aux groupes numérotés.
Les tâches regex courantes incluent la validation d'e-mails, l'analyse d'URL, l'extraction de données de texte structuré (fichiers de logs, CSV) et le remplacement de motifs lors de la refactorisation de code. Cependant, les regex ont des limites — elles ne peuvent pas analyser les structures imbriquées comme le HTML ou le JSON (utilisez un analyseur dédié), et les motifs trop complexes deviennent illisibles et non maintenables. La blague "maintenant vous avez deux problèmes" reflète les vrais défis de maintenance avec les regex complexes.
Le HTML est un langage non-contextuel avec des structures imbriquées que les expressions régulières ne peuvent fondamentalement pas gérer. Une regex ne peut pas correctement faire correspondre les balises ouvrantes et fermantes avec une profondeur d'imbrication arbitraire. Les cas simples peuvent sembler fonctionner mais échouent sur les cas limites impliquant des balises imbriquées, des attributs contenant >, ou des commentaires. Pour le traitement HTML, utilisez un analyseur DOM tel que DOMParser dans le navigateur, cheerio pour Node.js, ou BeautifulSoup pour Python.
La différence entre .* (gourmand) et .*? (paresseux) est significative pour le comportement de correspondance. Le gourmand .* correspond au maximum de caractères possible, puis revient en arrière si nécessaire. Le paresseux .*? correspond au minimum de caractères possible. Dans une chaîne comme "<b>un</b><b>deux</b>", le motif gourmand <b>.*</b> correspond à la chaîne entière, tandis que le motif paresseux <b>.*?</b> ne correspond qu'au premier "<b>un</b>". Choisir le mauvais mode est l'une des sources les plus courantes de comportement regex inattendu.
En JavaScript, le drapeau u (/motif/u) active la correspondance compatible Unicode. Sans lui, le métacaractère . ne correspond pas aux caractères en dehors du Plan Multilingue de Base (comme les emoji), et \\w ne correspond qu'aux caractères de mot ASCII. Le drapeau u fait en sorte que les quantificateurs et les classes de caractères gèrent correctement les paires de substitution et active les échappements de propriétés Unicode comme \\p{Letter}. Les assertions avant (?=...) et les assertions arrière (?<=...) sont des assertions de largeur zéro qui vérifient des motifs à une position sans les inclure dans la correspondance. L'assertion avant positive (?=...) affirme ce qui doit suivre, tandis que l'assertion avant négative (?!...) affirme ce qui ne doit pas suivre. Par exemple, \\d+(?= dollars) correspond aux nombres suivis de " dollars" mais ne capture que le nombre lui-même. Les assertions arrière fonctionnent de la même manière mais vérifient le texte précédent.