Test d’expressions régulières
Test d’expressions régulières
Test d’expressions régulières prend en charge la correspondance en temps réel, les groupes capturants, les groupes nommés et l’aperçu des remplacements pour la validation de motifs, l’extraction de texte et les remplacements en série.
/
/g
Recherche globale
Insensible à la casse
Multi-ligne
Point matche les sauts de ligne
Mode Unicode
Correspondance fixe
Texte du test
Texte de remplacement
Résultats des correspondances
Entrez un modèle pour commencer la correspondance
Aperçu du remplacement
Démarrage rapide
Scénarios courants
Extraire des ID, e-mails, dates ou marqueurs personnalisés depuis des logs, du HTML source ou du texte brut.
Vérifier le comportement d’un motif avant de l’utiliser dans du code, une validation de formulaire ou une règle de recherche.
Utiliser les groupes capturés ou nommés pour remplacer en lot une structure de texte ou le contenu de champs.
Conseils d'utilisation
Limitations et compatibilité
Confidentialité et sécurité
FAQ
Une expression régulière (regex) est un langage de modèles permettant de décrire les structures de texte. Considérez-le comme une « recherche avancée » : au lieu de rechercher un mot fixe, vous recherchez tout ce qui correspond à une règle. \n\nPar exemple, \\d{4}-\\d{2}-\\d{2} correspond à toutes les dates au format AAAA-MM-JJ et [\\w.]+@[\\n0.]+ correspond aux adresses e-mail. Regex est largement utilisé pour : la recherche et l'extraction de texte (recherche de codes d'erreur dans les journaux), la validation de format (vérification des numéros de téléphone) et le remplacement par lots (conversion des formats de date).\n1\n2Presque tous les langages de programmation (JavaScript, Python, Java, Go, etc.) et de nombreux outils (VS Code, grep, sed) prennent en charge les expressions régulières avec une syntaxe pour la plupart similaire. Cet outil utilise le moteur JavaScript RegExp pour des tests et un apprentissage en ligne rapides.
L'expression régulière JavaScript renvoie uniquement la première correspondance par défaut : il s'agit d'un comportement de spécification du langage et non d'une limitation de l'outil. Cliquez sur le bouton g dans la barre des drapeaux pour activer la recherche globale et voir toutes les correspondances.\n\nNotez l'interaction entre g et y : g analyse tout le texte du début à la fin, tandis que y (collant) exige que chaque correspondance commence exactement là où la précédente s'est terminée - s'il y a des caractères d'espace entre les correspondances, y s'arrête au premier espace. Habituellement, il suffit d'activer g sans y.
Il existe quatre causes courantes : \n\n1. Parenthèses sans correspondance : chaque ( doit avoir une correspondance ), chaque [ doit avoir une correspondance ]. Les IDE peuvent les compléter automatiquement, mais cet outil nécessite un couplage manuel.\n2. Quantificateurs mal placés : les quantificateurs (*, +, ?, {n}) doivent suivre un élément quantifiable. Les combinaisons comme *+ ou ?* sont illégales, sauf si le premier quantificateur est ? pour une modification paresseuse (comme *?).\n3. Échappements incomplets : un seul \\ à la fin est illégal — il doit échapper à un caractère spécifique (comme \\d, \\n, \\\\).\n4. Les propriétés Unicode nécessitent l'indicateur u : \\p\n0, \\n1{Script=Han} et les échappements de propriétés Unicode similaires génèrent des erreurs sans que l'indicateur u soit activé. Cliquez sur le bouton u pour l'activer.
Il s'agit de jetons de référence de remplacement définis par String.prototype.replace() de JavaScript :\n\n- $1, $2, ..., $99 : référencez le contenu capturé par le nième groupe de capture (...)\n- $& : l'intégralité du texte correspondant\n- $` : le texte avant la correspondance\n0- \n1 : le texte après la correspondance\n2- \n3 : le contenu capturé par le groupe nommé \n4...)\n5\n6Par exemple, le modèle (\\n7+)\\n8(\\n9+) correspondant à "hello world" avec le remplacement \n0-\n1 produit "world-hello". Pour inclure un $ littéral dans le remplacement, utilisez $$ pour y échapper.
Les délais d'attente sont presque toujours causés par un « retour en arrière catastrophique ». Lorsque le moteur d'expression régulière rencontre des quantificateurs imbriqués (comme (a+)+b) ou des chemins facultatifs qui se chevauchent, il revient en arrière sur un nombre exponentiel de combinaisons, provoquant une explosion du temps de correspondance.\n\nModèles dangereux typiques : (a+)+, (.*?)*, (.+)+$ etc. Solutions :\n1. Remplacer . avec des classes de caractères précises, par ex. [^\\s]+ au lieu de .+\n2. Évitez les quantificateurs imbriqués — remplacez (a+)+ par a+\n3. Réduisez les chemins facultatifs qui se chevauchent : remplacez (a|ab)+ par a+b?\n\nAprès avoir ajusté le modèle, cliquez sur le bouton "Réessayer" dans la zone des résultats de correspondance. L'outil dispose d'une protection contre l'expiration de 4 secondes et ne gèlera pas votre navigateur.
Différentes langues présentent des différences de moteur d'expression régulière dans trois domaines principaux : \n\n1. La prise en charge de la syntaxe varie : JavaScript ne prend pas en charge les modèles récursifs PCRE (?R), les branches conditionnelles (?(cond)yes|no) ou les groupes atomiques (?>...). Le module re de Python en manque également, mais son module regex les prend en charge. Java prend en charge les groupes atomiques mais pas la récursion.\n2. La gestion d'Unicode diffère : Python 3 traite \\w, \\d en Unicode par défaut ; JavaScript utilise ASCII par défaut — vous devez activer l'indicateur u manuellement. Cela signifie que \\w ne correspondra pas aux caractères chinois et que les limites des mots \\b ne s'appliquent pas entre les caractères CJK.\n3. La sémantique des nouvelles lignes diffère : celle de Python. ne correspond pas à \\n par défaut (comme JavaScript), tandis que Pattern.DOTALL de Java se comporte de la même manière que le drapeau s de JavaScript.\n0\n1Recommandation : utilisez cet outil pour une vérification logique rapide, puis effectuez une confirmation finale avec le moteur de votre langue cible.