Testeur d'Expressions Régulières
Testez et validez vos expressions régulières (regex) en temps réel. Outil gratuit pour développeurs avec support complet des flags et capture de groupes.
Options (Flags)
Exemples Rapides :
\d+ → Nombres entiers\w+@\w+\.\w+ → Adresses email (simple)#[0-9A-Fa-f]{6} → Couleurs hexadécimales^https?:// → URLs HTTP/HTTPS\b[A-Z]{2,}\b → Acronymes (2+ lettres majuscules)Testeur d'Expressions Régulières : Validez vos regex en temps réel
Les expressions régulières (regex) sont des patterns puissants pour rechercher, valider et extraire du texte. Que vous développiez en JavaScript, Python, PHP ou tout autre langage, les regex sont indispensables pour manipuler efficacement des données textuelles. Ce testeur vous permet de construire, tester et déboguer vos expressions régulières en temps réel avec une visualisation instantanée des correspondances et des groupes capturés.
Fini le cycle frustrant de "coder → tester → corriger → recommencer" ! Avec cet outil, vous voyez immédiatement si votre pattern fonctionne, quels groupes sont capturés, et où se trouvent les correspondances dans votre texte. Parfait pour valider des emails, extraire des données, parser des logs, ou apprendre les regex de manière interactive.
💡 Pourquoi ce testeur existe
Imaginez que vous devez valider des adresses email dans un formulaire. Vous écrivez cette regex :
Ça marche pour `user@example.com`, mais qu'en est-il de :
- `jean.dupont@example.fr` ? ❌ (le point n'est pas géré)
- `contact+spam@sub.example.com` ? ❌ (le + et sous-domaines non gérés)
- `USER@EXAMPLE.COM` ? ✅ (fonctionne, mais majuscules ?)
Au lieu de tester dans votre code et de recharger la page à chaque modification, utilisez ce testeur. Entrez votre pattern, collez des exemples réels, et voyez instantanément ce qui matche et ce qui échoue. Ajustez votre regex en direct jusqu'à ce qu'elle soit parfaite.
Pattern amélioré : `[\w.+-]+@[\w.-]+\.[a-zA-Z]{2,}` avec flag `i` pour ignorer la casse.
🔧 Cas d'utilisation concrets
1. Validation de formats (email, téléphone, etc.)
Imaginez que vous devez valider des adresses email dans un formulaire. Vous écrivez cette regex :
const emailPattern = /\w+@\w+\.\w+/;
Ça marche pour user@example.com, mais qu’en est-il de :
jean.dupont@example.fr? ❌ (le point n’est pas géré)contact+spam@sub.example.com? ❌ (le + et sous-domaines non gérés)USER@EXAMPLE.COM? ✅ (fonctionne, mais majuscules ?)
Au lieu de tester dans votre code et de recharger la page à chaque modification, utilisez ce testeur. Entrez votre pattern, collez des exemples réels, et voyez instantanément ce qui matche et ce qui échoue. Ajustez votre regex en direct jusqu’à ce qu’elle soit parfaite.
Pattern amélioré : [\w.+-]+@[\w.-]+\.[a-zA-Z]{2,} avec flag i pour ignorer la casse.
Cas d’utilisation concrets
1. Validation de formats (email, téléphone, etc.)
Vérifiez que les entrées utilisateur respectent le format attendu.
Exemples de patterns :
Email : [\w.+-]+@[\w.-]+\.[a-zA-Z]{2,}
Téléphone FR : 0[1-9](\s?\d{2}){4}
Code postal FR : \d{5}
URL : https?://[\w.-]+(:\d+)?(/[\w.-]*)*
Test réel :
Pattern: 0[1-9](\s?\d{2}){4}
Texte: "Mon numéro est 06 12 34 56 78"
✅ Match: "06 12 34 56 78"
Indispensable pour les formulaires web et la validation de données.
2. Extraction de données structurées
Capturez des informations spécifiques depuis du texte non structuré.
Exemple : Extraire des informations d’une facture
Pattern: Facture N°(\d+) du (\d{2}/\d{2}/\d{4})
Texte: "Facture N°2024-1234 du 15/11/2024"
Groupe 1: 2024-1234
Groupe 2: 15/11/2024
Autre exemple : Parser des logs serveur
Pattern: \[(\d{4}-\d{2}-\d{2})\s+(\d{2}:\d{2}:\d{2})\]\s+(\w+):
Texte: "[2024-11-15 14:23:45] ERROR: Connection timeout"
Groupe 1: 2024-11-15 (date)
Groupe 2: 14:23:45 (heure)
Groupe 3: ERROR (niveau)
3. Recherche et remplacement avancé dans le code
Refactorisez du code en utilisant des patterns complexes.
Exemple : Convertir console.log en logger
Find: console\.log\((['"`])(.*?)\1\)
Replace: logger.info($2)
Avant: console.log("User logged in")
Après: logger.info("User logged in")
Exemple : Extraire les imports ES6
Pattern: import\s+{([^}]+)}\s+from\s+['"]([^'"]+)['"]
Texte: import { Button, Input } from 'react-components'
Groupe 1: Button, Input
Groupe 2: react-components
Accélère les refactorisations massives.
4. Parsing et analyse de fichiers de configuration
Extrayez des paramètres depuis des fichiers INI, ENV ou autres formats textuels.
Exemple : Parser un fichier .env
Pattern: (\w+)=(['"]?)([^\2\n]+)\2
Texte:
DATABASE_URL="postgresql://localhost/db"
API_KEY=abc123xyz
Ligne 1:
Groupe 1: DATABASE_URL (clé)
Groupe 3: postgresql://localhost/db (valeur)
Ligne 2:
Groupe 1: API_KEY
Groupe 3: abc123xyz
Flags: gm (global + multiline)
5. Validation de mots de passe selon des règles complexes
Vérifiez que les mots de passe respectent des critères de sécurité.
Exemple : Au moins 8 caractères, 1 majuscule, 1 chiffre, 1 caractère spécial
Pattern: ^(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
Test cases:
❌ "password" → trop simple
❌ "Password" → manque chiffre et spécial
❌ "Pass1" → trop court
✅ "P@ssw0rd" → valide !
✅ "MyS3cur3P@ss" → valide !
Utilise des lookaheads positifs (?=...) pour vérifier plusieurs conditions.
6. Nettoyage et normalisation de texte
Supprimez ou remplacez des caractères indésirables, espaces multiples, etc.
Exemples courants :
# Supprimer espaces multiples
Pattern: \s+
Replace: " " (un seul espace)
"Hello world" → "Hello world"
# Supprimer tags HTML
Pattern: <[^>]+>
"<p>Hello <b>world</b></p>" → "Hello world"
# Extraire uniquement les chiffres
Pattern: \D+
Replace: "" (vide)
"Prix: 42,50 €" → "4250"
✨ Pourquoi utiliser cet outil ?
Validation instantanée à chaque modification. Voyez immédiatement ce qui matche sans recharger votre code.
Mise en évidence colorée des matchs dans votre texte. Identifiez rapidement ce qui fonctionne et ce qui échoue.
Affichage clair de tous les groupes capturés avec leur contenu. Parfait pour l'extraction de données.
Global (g), case-insensitive (i), multiline (m), unicode (u), dotAll (s). Tous les flags JavaScript disponibles.
Les patterns invalides sont détectés automatiquement avec des messages d'erreur clairs pour corriger rapidement.
Traitement local dans votre navigateur. Vos données sensibles (emails, logs, etc.) ne quittent jamais votre machine.
❓ Questions fréquentes (FAQ)
Mes regex JavaScript fonctionneront-elles dans d'autres langages ?
En grande partie, oui. La syntaxe de base des regex est standardisée et fonctionne dans la plupart des langages modernes (JavaScript, Python, PHP, Java, Ruby, etc.).
Compatibilité universelle :
- Caractères de base :
\d,\w,\s,+,*,?,.,^,$ - Classes de caractères :
[a-z],[^0-9] - Groupes et captures :
(...),(?:...) - Quantificateurs :
{n},{n,},{n,m}
Différences potentielles :
- Lookaheads/Lookbehinds : Pas supportés dans toutes les versions (ex: JavaScript avant ES2018 n’avait pas les lookbehinds
(?<=...)) - Flags : Différents selon les langages (Python utilise
re.MULTILINEau lieu dem) - Unicode : Support variable selon les langages et versions
- Syntaxe d’appel :
/pattern/flagsen JavaScript vsr'pattern'en Python
Conseil : Testez toujours dans l’environnement cible final.
Qu'est-ce que les flags et à quoi servent-ils ?
Les flags (ou drapeaux) modifient le comportement de votre expression régulière.
Flags disponibles en JavaScript :
| Flag | Nom | Effet |
|---|---|---|
g | Global | Trouve toutes les correspondances (pas seulement la première) |
i | Case Insensitive | Ignore majuscules/minuscules (A = a) |
m | Multiline | ^ et $ matchent début/fin de chaque ligne |
u | Unicode | Active le support Unicode complet (ex: emojis) |
s | DotAll | Le point . matche aussi les retours à la ligne |
Exemples pratiques :
// Sans flag 'g' : trouve uniquement la première occurrence
"abc abc abc".match(/abc/) // ["abc"]
// Avec flag 'g' : trouve toutes les occurrences
"abc abc abc".match(/abc/g) // ["abc", "abc", "abc"]
// Flag 'i' : ignore la casse
"Hello WORLD".match(/hello/i) // ["Hello"]
// Flag 'm' : ^ et $ pour chaque ligne
`ligne1
ligne2`.match(/^ligne/gm) // ["ligne", "ligne"]
Combinaison de flags : /pattern/gim pour global + case-insensitive + multiline.
Comment déboguer une regex qui ne fonctionne pas ?
Méthode systématique de débogage :
1. Vérifiez la syntaxe de base
- Parenthèses, crochets et accolades bien fermés ?
- Caractères spéciaux échappés avec
\si nécessaire ? - Pas de
\orphelins à la fin ?
Erreurs courantes :
❌ (abc → parenthèse non fermée
❌ [a-z → crochet non fermé
❌ {3,2} → intervalle invalide (min > max)
❌ *+ → quantificateurs en conflit
2. Simplifiez progressivement Commencez simple et ajoutez de la complexité :
Étape 1: \d → matche un chiffre ?
Étape 2: \d{2} → matche 2 chiffres ?
Étape 3: \d{2}/\d{2} → matche 12/34 ?
Étape 4: \d{2}/\d{2}/\d{4} → format date complet ?
3. Utilisez cet outil de test !
- Collez votre pattern
- Testez avec des exemples simples d’abord
- Vérifiez les messages d’erreur en rouge
- Ajoutez progressivement des cas limites
4. Vérifiez les flags
- Flag
gnécessaire pour trouver toutes les occurrences ? - Flag
ipour ignorer la casse ? - Flag
mpour le multiline ?
5. Attention aux quantificateurs gourmands
❌ <.*> → matche tout entre le PREMIER < et le DERNIER >
✅ <.*?> → matche chaque balise individuellement (non-gourmand)
Quelle est la différence entre les groupes capturants et non-capturants ?
Groupes capturants : (...)
Créent un “groupe numéroté” que vous pouvez réutiliser ou extraire.
const pattern = /(\w+)@(\w+)\.(\w+)/;
const match = "user@example.com".match(pattern);
console.log(match[0]); // "user@example.com" (match complet)
console.log(match[1]); // "user" (groupe 1)
console.log(match[2]); // "example" (groupe 2)
console.log(match[3]); // "com" (groupe 3)
Groupes non-capturants : (?:...)
Groupent sans créer de capture (plus performant si vous n’avez pas besoin du contenu).
// Avec capture (3 groupes créés)
/(https?)://([\w.]+)/
// Groupe 1: http/https, Groupe 2: domaine
// Sans capture inutile (1 seul groupe)
/(?:https?)://([\w.]+)/
// Groupe 1: domaine uniquement
Quand utiliser quoi ?
- Capturant
(...): Quand vous avez besoin d’extraire ou réutiliser le contenu - Non-capturant
(?:...): Quand vous groupez juste pour la structure ou un quantificateur
Exemple pratique :
# Valider un numéro de téléphone avec indicatif optionnel
^(?:\+33|0)[1-9](?:\d{2}){4}$
# └─────┘ └────────┘
# Non-capturant Non-capturant
# (indicatif) (paires de chiffres)
Moins de groupes = regex plus rapide et résultats plus clairs !
Comment gérer les caractères spéciaux qui ont une signification en regex ?
Certains caractères ont une signification spéciale en regex et doivent être échappés avec \ pour matcher le caractère littéral.
Caractères spéciaux à échapper :
. ^ $ * + ? { } [ ] \ | ( )
Exemples pratiques :
# Matcher un point littéral (pas "n'importe quel caractère")
❌ 192.168.1.1 → matche "192a168a1a1" aussi !
✅ 192\.168\.1\.1 → matche uniquement avec des points réels
# Matcher des parenthèses littérales
❌ (test) → crée un groupe capturant
✅ \(test\) → matche le texte "(test)"
# Matcher un dollar ou une étoile
Prix: 42\$ → matche "Prix: 42$"
Note: 5\* → matche "Note: 5*"
# Matcher un backslash
Chemin: C:\\Users → matche "C:\Users"
Astuce : Si vous devez matcher beaucoup de caractères spéciaux, utilisez une classe de caractères [...] ou échappez-les tous :
# Matcher les opérateurs mathématiques
[+\-*/=] → plus simple que \+|\-|\*|\/|=
Dans les classes [...] :
Seuls -, ], \ et ^ (au début) doivent être échappés :
[a-z] → plage de a à z
[a\-z] → caractères a, -, z (tiret littéral)
[\]] → crochet fermant littéral
[^abc] → tout SAUF a, b, c (^ au début = négation)
[a^bc] → a, ^, b, c (^ ailleurs = littéral)
Les regex peuvent-elles ralentir mon application ?
Oui, certaines regex mal conçues peuvent causer des ralentissements catastrophiques, voire bloquer votre application (ReDoS - Regular Expression Denial of Service).
Le problème : Backtracking excessif
Certains patterns causent un nombre exponentiel de tentatives :
# ⚠️ DANGEREUX - Catastrophic backtracking
^(a+)+$
^(a|a)*$
^(a*)*$
# Test avec "aaaaaaaaaaaaaaaaaaaaX"
# → Des MILLIARDS de combinaisons testées avant d'échouer !
Exemple réel problématique :
# Validation d'email naïve (LENT)
(\w+\.)*\w+@(\w+\.)+\w+
# Sur un long texte, peut prendre plusieurs secondes !
Solutions pour des regex performantes :
1. Évitez les quantificateurs imbriqués
❌ (a+)+ → backtracking exponentiel
✅ a+ → simple et rapide
2. Soyez spécifique
❌ .*@.*\..* → trop vague
✅ [\w.-]+@[\w.-]+\.[a-z]{2,} → précis et rapide
3. Ancrez vos patterns
❌ \d{3}-\d{3}-\d{4} → cherche dans tout le texte
✅ ^\d{3}-\d{3}-\d{4}$ → vérifie uniquement format exact
4. Utilisez des groupes non-capturants
❌ (http|https):// → capture inutile = ralentissement
✅ (?:https?:// → plus rapide
5. Testez avec des inputs longs Si votre regex prend >100ms sur du texte normal, c’est un red flag !
Outils de détection : regex101.com montre le nombre d’étapes de backtracking.
📚 Bonnes pratiques
-
Testez d’abord, codez ensuite : Validez votre regex dans cet outil avec des cas réels avant de l’intégrer dans votre code. Vous gagnerez des heures de débogage.
-
Commencez simple, complexifiez progressivement : Construisez votre pattern étape par étape. Ne tentez pas d’écrire une regex complexe d’un coup.
-
Documentez vos regex complexes : Les regex sont difficiles à relire. Ajoutez des commentaires expliquant ce que fait chaque partie.
-
Utilisez des groupes nommés pour la lisibilité (ES2018+) :
(?<nom>pattern)au lieu de groupes numérotés. -
Attention aux performances : Évitez les quantificateurs imbriqués
(a+)+qui causent du backtracking exponentiel. Testez avec des inputs longs. -
Privilégiez la précision à la généralité :
[\w.-]+@[\w.-]+\.[a-z]{2,}est plus sûr que.*@.*pour les emails. -
Sauvegardez vos patterns utiles : Créez une bibliothèque personnelle de regex réutilisables (validation email, téléphone, URLs, etc.).