Testeur Regex gratuit — Déboguez vos motifs en ligne
Testez vos expressions régulières en ligne, gratuit. Correspondances en direct, groupes de capture, aperçu de remplacement, découpe et explication du motif. Regex JavaScript, 100 % confidentialité — sans inscription.
Notre équipe valide la sortie regex face à la spécification ECMA-262, au comportement RegExp de Node.js et à des tests de parité multi-moteurs sur V8 / JavaScriptCore / SpiderMonkey. Le budget ReDoS est calibré contre les motifs pire cas documentés des corpus regex-DoS de Snort et de l'OWASP.
Qu'est-ce qu'un testeur regex ?
Un testeur regex (testeur d'expressions régulières) est un outil qui vous permet d'écrire un motif regex, de coller un morceau de texte de test et de voir exactement ce que le motif capture — avec les groupes de capture, l'aperçu de remplacement et la décomposition des drapeaux — sans recompiler de code ni exécuter de script. Pour les développeurs, cela réduit la boucle de quelques minutes à quelques millisecondes : ajustez le motif, regardez les surlignages bouger, livrez le regex en confiance.
Une expression régulière est un langage compact pour décrire des motifs de texte. \d+ capture un ou plusieurs chiffres. [A-Za-z_]\w* capture un identifiant typique. (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) capture une date ISO et nomme chaque partie. Les expressions régulières sont l'épine dorsale du rechercher-remplacer dans chaque éditeur de code, de la validation dans chaque formulaire, de l'analyse de logs dans chaque pile d'observabilité, et de grep, sed et awk — les outils Unix sur lesquels tourne la moitié d'Internet. Elles sont aussi notoirement difficiles à écrire correctement : un quantificateur décalé d'un cran ou un échappement manquant peut capturer la mauvaise sous-chaîne, manquer entièrement une correspondance ou — pire — déclencher un retour arrière catastrophique qui prend un cœur de CPU en otage. Un bon testeur regex attrape chacun de ces modes de défaillance avant qu'il n'atteigne la production.
Ce testeur exécute le moteur RegExp ECMA-262 natif livré dans chaque navigateur moderne — le même moteur que vous appelez depuis JavaScript, TypeScript, Node.js, Deno ou Bun. Cela signifie : groupes de capture (numérotés et nommés avec (?<name>...)), assertions d'anticipation et de rétro-anticipation ((?=...), (?!...), (?<=...), (?<!...)), les sept drapeaux canoniques (g, i, m, s, u, y, d), les échappements de propriétés Unicode (\p{Letter}, \p{Script=Han}) sous /u, et les échappements de caractères de style \d. Les motifs que vous validez ici se collent directement dans votre base de code et fonctionnent sans modification. Si vous portez depuis PCRE, Python ou Java, l'explicateur décompose chaque jeton pour que vous puissiez repérer la syntaxe qui ne se traduit pas (groupes atomiques, quantificateurs possessifs, modificateurs en ligne).
Ce que le testeur expose au-delà des correspondances brutes : le panneau Correspondances & groupes de capture liste chaque correspondance avec ses décalages [début, fin) et la valeur de chaque groupe de capture — la même information que vous obtiendriez de String.prototype.matchAll avec le drapeau /d, mais disposée pour un balayage visuel. L'onglet Remplacer affiche un aperçu de substitution en direct prenant en charge l'alphabet complet de modèles $1 / $& / $` / $' / $$ / $<name> — exactement ce que String.replace de JavaScript accepte. L'onglet Découper applique String.split avec le regex et affiche chaque partie. L'onglet Expliquer tokenise le motif et annote chaque morceau en français clair, utile pour la revue de code, l'enseignement et le portage entre dialectes.
Pour la confidentialité : chaque opération est locale. Votre motif et votre texte de test ne quittent jamais la page — ils ne sont pas journalisés, pas envoyés à un service d'analyse, pas stockés sur disque. Seules vos préférences d'interface (onglet actif + drapeaux que vous activez habituellement) persistent dans localStorage. Cela rend cet outil sûr pour les échantillons de logs caviardés, les motifs propriétaires, la configuration interne et les motifs contenant des indices sur le schéma de vos données. Comparé aux testeurs adossés à un serveur comme regex101, l'histoire de la confidentialité et de la latence est strictement meilleure ; le compromis est la prise en charge d'une seule saveur (JavaScript uniquement).
Si vous êtes nouveau en regex, le menu déroulant Motifs courants livre des points de départ éprouvés au combat : adresse e-mail, URL, IPv4, UUID, couleur hex, date ISO, numéro de téléphone US, et un motif de suppression des espaces de fin. Chargez-en un, observez les correspondances sur le texte d'exemple fourni, puis mutez le motif un caractère à la fois pour sentir comment le moteur réagit. Associez cela à l'outil Diff de texte quand vous voulez comparer l'avant/après d'un nettoyage regex, à Formateur JSON quand votre entrée ou sortie attendue est en JSON, ou à Encodeur URL quand les chaînes que vous capturez sont encodées en URL.
// The pattern you build in this tester drops straight into JavaScript.
// Example: extract every ISO date from a string with named groups.
const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const text = 'shipped 2026-05-21, scheduled 2026-06-30';
for (const m of text.matchAll(pattern)) {
console.log(m.groups.year, m.groups.month, m.groups.day);
// → 2026 05 21
// → 2026 06 30
}
// Same regex, used in a replace with $<name> templates:
text.replace(pattern, '$<day>/$<month>/$<year>');
// → 'shipped 21/05/2026, scheduled 30/06/2026'
// With the /d flag, every match carries [start, end] indices
// per capture group — the Matches panel uses this to paint offsets.
const p2 = /(?<year>\d{4})-(?<month>\d{2})/gd;
const m = [...text.matchAll(p2)][0];
m.indices.groups.year; // [8, 12] Fonctionnalités clés
Surlignage des correspondances en direct
Chaque correspondance dans votre texte de test s'illumine dès que votre motif s'analyse. Les couleurs alternées rendent les correspondances adjacentes faciles à compter visuellement, et le badge de comptage au-dessus du résultat vous donne le total exact — pas de bouton Exécuter, pas de délai de debounce supérieur à 200 ms.
Panneau latéral des groupes de capture
Le panneau Correspondances & groupes de capture, à droite, liste chaque correspondance sous forme de carte avec ses décalages [début, fin), le texte complet de la correspondance et chaque groupe de capture positionnel + nommé à l'intérieur. Les groupes nommés s'étiquettent eux-mêmes $<name> pour que vous lisiez les données comme vous les consommerez dans le code.
Aperçu de remplacement en direct avec $1 / $& / $<name>
Passez à l'onglet Remplacer pour voir votre substitution appliquée en temps réel. L'alphabet complet de remplacement ECMAScript fonctionne : $1..$N pour positionnel, $<name> pour nommé, $& pour toute la correspondance, $` et $' pour préfixe/suffixe, $$ pour un dollar littéral. Panneaux d'entrée et de sortie côte à côte avec copie en un clic.
Découpe avec frontières regex
L'onglet Découper appelle String.prototype.split avec votre regex et affiche chaque partie sous forme de liste numérotée. Les parties vides sont rendues avec un glyphe ⏎ pour que vous voyiez comment le moteur a géré les délimiteurs adjacents — utile pour déboguer le nettoyage d'entrée de type CSV.
Explicateur de motif (jeton par jeton)
L'onglet Expliquer tokenise votre motif en puces colorées par classe (échappement / quantificateur / classe de caractères / groupe / ancre / alternance) et annote chaque puce d'une description d'une ligne. Relisez-vous votre propre regex avant la livraison ; utilisez-le pour la revue de code ou l'enseignement.
Sûr face au ReDoS (timeout wall-clock)
Chaque appel de correspondance est enveloppé dans un budget de 250 millisecondes. Les formes classiques de retour arrière catastrophique comme (a+)+, (a|aa)+b et les quantificateurs profondément imbriqués avortent proprement avec un avertissement « Motif expiré » — la page reste réactive au lieu de bloquer l'onglet. Détection sans bac à sable côté serveur.
Bibliothèque de motifs courants
Points de départ éprouvés au combat pour les huit motifs que les développeurs cherchent le plus : e-mail, URL, IPv4, UUID v4, couleur hex, date ISO, numéro de téléphone US et suppression des espaces de fin. Chacun se charge avec un exemple correspondant pour que vous voyiez le regex fonctionner avant de l'adapter.
Partage par permalien (sans téléversement)
Copier le lien encode motif + drapeaux + texte d'exemple dans le hash d'URL (#p=…&f=gim&t=…). Les navigateurs ne transmettent jamais les fragments d'URL dans les requêtes, donc un lien partagé reproduit votre état sur la machine du destinataire sans toucher aux serveurs go-tools.org. Autonome, vérifiable.
100 % confidentiel, navigateur uniquement
Votre regex et votre texte de test ne quittent jamais votre appareil. Pas de requêtes réseau, pas de journalisation, pas d'analyse sur ce que vous tapez. Vérifiez dans DevTools → Réseau : zéro requête quand vous tapez. Sûr pour les motifs propriétaires, les logs caviardés et tout texte que vous ne colleriez pas dans regex101.
Exemples détaillés
Extraire toutes les adresses e-mail d'un paragraphe
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g Collez le motif avec le drapeau /g activé, déposez un paragraphe dans le texte de test et chaque e-mail s'illumine dans la vue surlignée. Le panneau Correspondances & groupes de capture, à droite, liste chaque adresse avec ses décalages [début, fin) — utile lorsque vous transmettez le même regex à grep, sed ou à un éditeur de code.
Capturer les parties d'une date avec des groupes nommés
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g Les groupes nommés ECMA-262 apparaissent dans le panneau de droite sous la forme $<year>, $<month>, $<day>. Passez à l'onglet Remplacer et essayez $<day>/$<month>/$<year> pour reformater les dates ISO en JMA d'un seul coup — la même astuce fonctionne dans tout appel JS moderne à replace.
Rechercher/remplacer avec des références arrière $1
(\w+) (\w+)
Remplacement : $2, $1 → Jack Doe → Doe, Jack
Deux groupes de capture anonymes, un modèle de remplacement $2, $1, et l'onglet Remplacer vous donne un aperçu en direct. $&, $`, $', $$ et $<name> sont tous pris en charge — exactement l'alphabet de substitution de la spécification ECMAScript, donc ce que vous copiez s'exécute tel quel dans n'importe quel moteur JS.
Supprimer les espaces de fin de ligne, ligne par ligne
[ \t]+$
/[ \t]+$/gm
Combinez les drapeaux /g (global) et /m (multiligne) pour que $ s'ancre à la fin de chaque ligne, pas seulement à la fin de l'entrée. L'onglet Remplacer avec un aperçu de remplacement vide montre un diff propre : les tabulations et espaces de fin disparaissent, le texte reste en place. Le même regex avec le drapeau /s (dotAll) désactivé empêche le . de franchir les sauts de ligne.
Détecter le retour arrière catastrophique et y survivre
(a+)+b
Texte de test : aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac
Les quantificateurs + imbriqués forment un motif ReDoS classique. Dans un testeur naïf, cela fige l'onglet. Ici, la garde wall-clock se déclenche après 250 ms, la bannière « Motif expiré » apparaît et la page reste réactive. Ancrez le motif, passez à une alternance non chevauchante ou utilisez des idiomes de type atomique — puis retestez.
Découper une ligne de type CSV par délimiteurs mixtes
[,;|]\s*
alpha, beta; gamma | delta → ["alpha", "beta", "gamma", "delta"]
Passez à l'onglet Découper. Toute virgule, point-virgule ou barre verticale (suivi d'un espace optionnel) devient une frontière de partie. Utile pour nettoyer des listes d'étiquettes collées, normaliser les entrées utilisateur ou prétraiter des champs de log avant un vrai analyseur CSV — voyez CSV vers JSON lorsque les données sont vraiment au format RFC 4180.
Comment utiliser le testeur regex
- 1
Tapez votre motif entre les barres obliques
Déposez n'importe quelle expression régulière ECMA-262 dans le champ /…/. Les motifs invalides se surlignent en rouge avec un message de l'analyseur ; les motifs valides passent à la correspondance en direct.
- 2
Activez les drapeaux dont vous avez besoin
g (global), i (insensible à la casse), m (multiligne), s (dotAll), u (unicode), y (collant), d (indices). Chaque puce s'allume quand elle est activée ; la lecture à droite du motif affiche le littéral canonique.
- 3
Collez votre texte de test
Les correspondances se surlignent en couleurs alternées à mesure que vous tapez. Le panneau Correspondances & groupes de capture, à droite, liste chaque correspondance avec ses décalages [début, fin) et la valeur de chaque groupe de capture (les groupes nommés étiquetés $<name>).
- 4
Changez d'onglet pour Remplacer, Découper ou Expliquer
Remplacer prévisualise un modèle de substitution à côté de l'entrée. Découper coupe à chaque frontière de correspondance. Expliquer décompose le motif jeton par jeton avec une description en français clair par élément.
- 5
Copiez le littéral ou partagez un permalien
Copier /motif/drapeaux dépose le littéral regex canonique dans votre presse-papiers pour une utilisation directe dans JavaScript / TypeScript / Node. Copier le lien encode l'état complet dans un hash d'URL (pas de téléversement) pour qu'un collègue puisse le reproduire localement.
Erreurs regex courantes
Oublié le drapeau /g et n'obtenu qu'une seule correspondance
Sans /g (ou /y), le moteur s'arrête après la première correspondance. Les méthodes match, matchAll, replace et split se comportent toutes différemment autour du drapeau global. Activez /g et relancez ; le compteur au-dessus des résultats passe de 1 à N.
Motif : /\d+/ → '1 22 333' donne seulement ['1']
Motif : /\d+/g → '1 22 333' donne ['1', '22', '333']
Quantificateur gourmand qui a trop consommé
.+ consomme autant que possible, donc <.+> contre <a> and <b> capture <a> and <b>, pas <a>. Utilisez des quantificateurs paresseux (.+?), des classes de caractères plus restrictives ([^>]+), ou ancrez avec des look-arounds.
Motif : /<.+>/ → capture '<a> and <b>'
Motif : /<[^>]+>/ → capture '<a>' et '<b>' séparément
Retour arrière catastrophique dû à des quantificateurs imbriqués
(a+)+b contre une longue chaîne qui échoue explose exponentiellement. La bannière « Motif expiré » se déclenche après 250 ms ; réécrivez pour supprimer l'imbrication : a+b fait le même travail en temps linéaire. La simulation de groupe atomique (?=(a+))\1b est une autre option.
Motif : /(a+)+b/ sur 'aaaaaaaaaaaaaaaaaaaaac' → timeout
Motif : /a+b/ sur la même entrée → « aucune correspondance » instantané
Les ancres $ et ^ ne se comportent pas comme les \A et \Z de Python
En JavaScript, ^ et $ signifient début-de-ligne / fin-de-ligne UNIQUEMENT quand /m est activé ; sinon ils signifient début-de-chaîne / fin-de-chaîne. Les \A et \Z de Python (qui signifient toujours les frontières de chaîne) n'existent pas en JS. Activez /m au besoin.
Motif : /^Error/ sur un log multiligne sans /m → capture seulement la première ligne
Motif : /^Error/m sur la même entrée → capture chaque ligne commençant par Error
Utilisé $1 dans une chaîne mais appelé replace avec une fonction
text.replace(re, '$1') développe la référence arrière. text.replace(re, () => '$1') passe une chaîne littérale '$1' car les fonctions ne voient pas les jetons de modèle. À l'intérieur de la fonction, les groupes de capture arrivent comme arguments positionnels.
text.replace(/(\w+)/, m => '$1') → donne le littéral '$1'
text.replace(/(\w+)/, (_, g1) => g1.toUpperCase()) → utilise la capture
Caractères Unicode non capturés avec \w ou .
Par défaut \w est [A-Za-z0-9_]. Pour capturer chaque lettre dans chaque écriture, activez /u et passez à \p{Letter} (\p{L}). Le point s'arrête aussi aux sauts de ligne par défaut — utilisez /s (dotAll) quand vous voulez un vrai any-character.
Motif : /\w+/ capture 'hello' mais pas 'héllo' ni '你好'
Motif : /\p{Letter}+/u capture les trois Collé un motif PCRE ; obtenu un SyntaxError
JavaScript ne prend pas en charge les groupes atomiques (?>...), les quantificateurs possessifs a++, les modificateurs en ligne (?i), les conditionnels (?(1)yes|no), ni \A / \Z. L'erreur de l'analyseur nomme le construit fautif — réécrivez vers l'équivalent pris en charge par JS (simulation look-around, bascule de drapeau séparée, alternance).
Motif : (?i)foo → SyntaxError: invalid group
Motif : foo avec drapeau /i activé → même effet
Qui utilise cet outil
- Valider les entrées de formulaire avant la livraison
- Confirmez que votre regex e-mail / téléphone / code postal / nom d'utilisateur capture ce que vous attendez — et rejette ce que vous ne voulez pas — sur les cas limites (noms unicode, plus-aliasing, formats internationaux) avant que la validation n'atteigne la production et ne fasse rebondir de vrais utilisateurs.
- Extraire des données de logs et de configurations
- Construisez un motif qui extrait des ID de requête, des codes de statut, des latences ou des lignes de trace de pile d'une tranche de log arbitraire. Les groupes nommés rendent les données auto-documentées ; le panneau Correspondances affiche les décalages pour que vous puissiez ensuite transmettre le même regex à
rg --replaceougrep -oE. - Rechercher/remplacer dans une base de code
- Esquissez un motif de refactorisation (ex.
(\w+)\.apply\(null,\s*\[(.*?)\]\)→$1($2)) ici, prévisualisez la substitution sur des extraits représentatifs, puis collez le regex validé dans le rechercher/remplacer à l'échelle du projet de votre éditeur, en confiance. - Vérifier la cohérence d'un motif trouvé en ligne
- Collé un regex depuis StackOverflow ou un blog ? Déposez-le dans l'onglet Expliquer — chaque jeton est annoté en français clair. Attrape les problèmes subtils (
.+?là où vous vouliez.+, ancres^/$manquantes, quantificateurs gourmands par accident) avant que le regex n'atterrisse dans votre code. - Enseigner le regex à un coéquipier
- Ouvrez l'onglet Expliquer sur un motif fonctionnel et parcourez-le jeton par jeton. Le codage couleur (échappement / quantificateur / classe de caractères / groupe / ancre / alternance) permet à l'apprenant de voir la forme structurelle du regex, pas seulement les caractères.
- Porter un motif entre langages
- Vous avez un regex Python ou PCRE à utiliser en JavaScript ? Collez-le ici. S'il s'analyse, l'explicateur vous montre la sémantique équivalente en JS ; s'il ne s'analyse pas, l'erreur de l'analyseur nomme le construit fautif (groupes atomiques, quantificateurs possessifs,
(?i)en ligne) pour que vous sachiez exactement quoi réécrire. - Déboguer un regex de production lent
- Si un regex serveur est suspecté de retour arrière catastrophique, collez-le dans ce testeur avec un échantillon de l'entrée. La garde wall-clock de 250 ms se déclenche sur les cas pathologiques, vous donnant un diagnostic immédiat avant de sortir l'outillage de profilage — et l'explicateur pointe la cause racine du quantificateur imbriqué.
Notes sur le moteur et l'algorithme
- Moteur RegExp ECMA-262 (natif du navigateur)
- Utilise
new RegExp(pattern, flags)et le moteur livré avec V8 / JavaScriptCore / SpiderMonkey — la même sémantique regex que vous obtenez en JavaScript partout. Les motifs qui se valident ici s'exécutent sans modification dans Node.js, Deno, Bun et chaque navigateur moderne. - Itération de correspondance via String.matchAll
- L'itération globale utilise
text.matchAll(regex)plutôt qu'une boucle manuelle sur lastIndex, donc chaque correspondance porte ses groupes de capture, ses groupes nommés et (avec /d) ses indices [début, fin]. Les correspondances de largeur nulle sont gérées avec l'avance standard de +1 sur lastIndex pour éviter les boucles infinies. - Timeout wall-clock pour la protection ReDoS
- Un budget de 250 millisecondes enveloppe chaque appel de match, replace et split. Le moteur peut toujours faire du retour arrière en interne sur une seule tentative de correspondance, mais l'itération externe coopère avec le budget — les motifs pathologiques avortent avec
timedOut: trueet l'interface affiche un avertissement au lieu de bloquer l'onglet. - Réimplémentation du modèle de remplacement
- L'onglet Remplacer analyse $1..$N, $&, $
, $', $$ et $<name> manuellement au lieu de déléguer àString.replace`, pour que l'aperçu se comporte de manière identique entre les moteurs (anciens Safari, anciens Node) où les modèles à groupes nommés ont des cas limites. La sortie est exactement ce que produisent les moteurs JavaScript actuels. - Tokeniseur de motif pour l'explicateur
- L'onglet Expliquer exécute un tokeniseur écrit à la main qui classe chaque fragment de motif (échappement / métacaractère / quantificateur / classe de caractères / ouverture-groupe / fermeture-groupe / ancre / alternance). Les constructions inconnues retombent sur
literalavec une note générique, l'explicateur ne laisse donc jamais tomber silencieusement de contenu. - Permaliens via hash d'URL (jamais transmis)
- L'état de partage est encodé dans le fragment location.hash (
#p=…&f=…&t=…&tab=…). Les navigateurs ne transmettent jamais le fragment dans les requêtes HTTP, donc les serveurs go-tools.org ne reçoivent aucune donnée lorsqu'un permalien est ouvert. L'hydratation se passe entièrement sur l'appareil du destinataire.
Bonnes pratiques regex
- Ancrez les motifs quand vous le voulez vraiment
^motif$capture une chaîne exacte ;motifcapture n'importe où. Le mauvais choix est le bug le plus courant en validation de formulaire : un^manquant laisse passer un préfixeattacker.com/devant un contrôle de domaine ; un$manquant laisse passer des déchets en fin. Utilisez l'onglet Correspondance contre des échantillons délibérément cassés pour confirmer ce qui est rejeté.- Préférez les groupes non capturants pour la structure pure
(?:foo|bar)+et(foo|bar)+sont fonctionnellement identiques, mais le premier n'alloue pas de groupe de capture. Optez pour(?:…)chaque fois que le groupe n'existe que pour un quantificateur ou une alternance — garde vos $1..$N numérotés stables et économise un infime travail du moteur.- Utilisez le drapeau /u pour tout ce qui dépasse l'ASCII
- Sans /u, le point et
\wtraitent les caractères à paires de substitution (emojis, points de code hors BMP) comme deux unités UTF-16. Avec /u, ils sont chacun un point de code — ce que vos utilisateurs percevront. /u active aussi\p{Letter}et d'autres échappements de propriétés. Par défaut, mettez /u sur les nouveaux motifs, sauf raison spécifique de ne pas le faire. - Nommez vos groupes de capture
(?<year>\d{4})-(?<month>\d{2})est auto-documenté. Six mois plus tard quand vous relisez le regex,m.groups.yearest manifestement l'année —m[1]non. Les modèles de remplacement avec $<name> survivent aussi au réordonnancement des groupes : les modèles positionnels cassent dès que quelqu'un ajoute un autre groupe.- Testez les cas d'échec, pas seulement de succès
- Un testeur regex sert aux échecs. Confirmez ce que votre motif capture, puis mutez délibérément le texte de test pour voir ce qu'il ne capture pas — espaces en tête, espaces en fin, parties manquantes, parties en trop, mauvaise casse, écritures mélangées. Les motifs qui passent une entrée valide mais acceptent les déchets sont les bugs que la production expose en premier.
Questions fréquentes
Mon regex ou mon texte de test est-il envoyé à votre serveur ?
Quelle saveur regex ce testeur utilise-t-il — PCRE, Python, Java, JavaScript ?
new RegExp(pattern, flags) dans n'importe quel navigateur, Node.js, Deno ou Bun. Les fonctionnalités prises en charge sont donc : groupes de capture (numérotés + nommés avec (?<name>...)), anticipations (?=...) et (?!...), retro-anticipations (?<=...) et (?<!...), les sept drapeaux g/i/m/s/u/y/d, les échappements de propriétés Unicode (\p{Letter}) sous /u, et les références arrière \1..\9. Les fonctionnalités propres à PCRE comme les groupes atomiques (?>...), les quantificateurs possessifs a++, les conditionnels (?(1)yes|no) et les modificateurs en ligne (?i) déclencheront une erreur de syntaxe. re.VERBOSE de Python n'est pas pris en charge ici. Pour les regex Python/Java/Go, reportez le motif vers son moteur natif — la plupart des motifs simples se transfèrent tels quels, et l'explicateur ici est neutre quant à la saveur. À quoi servent chacun des drapeaux g, i, m, s, u, y, d ?
.indices et .indices.groups avec des paires [début, fin] pour chaque capture ; ce testeur utilise /d sous le capot pour dessiner les frontières de groupe. Basculez-les via les puces au-dessus du texte de test ; le littéral canonique /motif/drapeaux est affiché dans la lecture. Comment écrire des groupes de capture et comment y faire référence ?
(\d{4})-(\d{2})-(\d{2}) vous donne trois groupes positionnels, accessibles via $1, $2, $3 dans les remplacements ou via m.groups[0..2] dans le panneau Correspondances. Utilisez (?<name>...) pour les groupes nommés : (?<year>\d{4})-(?<month>\d{2}) vous permet d'écrire $<year>/$<month> dans le modèle de remplacement. Utilisez (?:...) pour un groupe non capturant lorsque vous n'avez besoin du regroupement que pour un quantificateur ((?:foo|bar)+) — il ne crée pas de référence arrière, ce qui garde vos $1..$N numérotés stables. Dans le même motif, faites référence à une capture antérieure avec \1, \2, etc. — pratique pour trouver des mots doublés comme \b(\w+)\s+\1\b. Comment fonctionnent l'anticipation et la rétro-anticipation, et à quoi servent-elles ?
(?=foo) (anticipation positive) réussit si foo suit la position actuelle ; (?!foo) (anticipation négative) réussit si foo ne suit PAS. (?<=foo) et (?<!foo) sont les contreparties en rétro-anticipation. Usages pratiques : extraire une sous-chaîne sans inclure son environnement ((?<=\$)\d+ capture les chiffres après un signe dollar, mais $ ne fait pas partie de la correspondance), valider avec plusieurs contraintes en un seul motif ((?=.*[A-Z])(?=.*\d).{8,} exige au moins une majuscule, un chiffre et 8 caractères), et interdire des occurrences (^(?!.*\bpassword\b) rejette toute ligne contenant le mot password). L'ECMA-262 moderne prend en charge la rétro-anticipation de longueur variable, donc (?<=^prefix-?) fonctionne. Pourquoi mon regex fige-t-il le navigateur, et qu'est-ce que le retour arrière catastrophique ?
(a+)+, (a|aa)+, (\w*)* ou (?:a|a?)+. Sur une entrée où la correspondance peut échouer au dernier caractère, le moteur essaie un nombre exponentiel de découpes de groupes avant d'abandonner. Sur aaaaaaaaaaaaaaaaaaaaab avec le motif (a+)+b, cela représente 2^21 ≈ 2 millions de retours arrière avant la réponse. Ce testeur enveloppe chaque appel de correspondance dans un budget wall-clock de 250 ms — si le budget est dépassé, l'itération s'arrête et vous voyez un avertissement « Motif expiré ». Corrections : ancrer le motif à ses frontières (^...$), préférer des alternatives non chevauchantes ((a|b) au lieu de (a|aa)), dérouler les quantificateurs imbriqués (a+ au lieu de (a+)+), ou réécrire avec des idiomes de type possessif ((?=(a+))\1 simule a++ en JS). En quoi ce testeur regex diffère-t-il de regex101.com ?
Comment échapper les caractères spéciaux comme . | ( ) [ ] { } * + ? ^ $ \ ?
\., \|, \(, \), \[, \], \{, \}, \*, \+, \?, \^, \$, \\. La barre oblique / n'a pas besoin d'être échappée dans un motif passé sous forme de chaîne (seulement dans les littéraux regex JS entre les barres obliques). À l'intérieur d'une classe de caractères [...], la plupart des métacaractères perdent leur sens spécial, donc [.], [*], [+] correspondent tous à un caractère littéral — les seuls métacaractères qui restent spéciaux sont ], \, ^ (seulement au début pour négation) et - (plage entre deux caractères). En cas de doute, collez le texte littéral dans le motif et lancez l'explicateur : chaque séquence d'échappement obtient une description d'une ligne dans le panneau de décomposition. Puis-je partager un regex avec un collègue via un lien ?
#p=...&f=gim&t=...&tab=match). Quiconque ouvre le lien hydrate la page avec le même état — localement sur sa machine. Comme les données vivent dans le fragment de hash, elles ne sont jamais envoyées au serveur go-tools.org (les navigateurs ne transmettent pas les fragments dans les requêtes) et ne figurent pas dans nos journaux d'accès. La longueur du lien augmente avec la taille du texte, donc pour des échantillons supérieurs à 2 Ko, copiez le regex via Copier /motif/drapeaux et collez le texte séparément. Pour une revue regex collaborative sans partager le texte réel, partagez seulement le motif et les drapeaux — le destinataire colle son propre corpus et obtient les mêmes correspondances. Le testeur prend-il en charge Unicode, les emojis et les écritures non latines ?
\p{Letter} correspond à toutes les lettres de toutes les écritures, \p{Script=Han} aux idéogrammes chinois, \p{Emoji} aux emojis, \p{Number} à tout chiffre/numéral. Sans /u, les emojis à paires de substitution comme 👨💻 sont vus comme deux unités de code UTF-16 et des motifs comme ^.$ échouent à les capturer ; avec /u, le point traite chaque point de code de graphème comme un caractère. Pour les écritures de droite à gauche (arabe, hébreu), les motifs fonctionnent sans gestion spéciale — la direction est une affaire de rendu, pas du moteur regex. Le contenu CJC se compare de la même manière que le latin. Quelle est la différence entre .match, .matchAll, .replace et .split avec un regex ?
Pourquoi mon regex Python ou Java ne fonctionne-t-il pas ici ?
(?i) et (?x) de Python ne sont pas valides en JS — utilisez plutôt les puces de drapeaux ci-dessus. (2) Les \A et \Z de Python sont ^ et $ en JS (avec /m pour les ancres de ligne). (3) Les conditionnels Java/Python (?(name)yes|no) ne sont pas pris en charge en JS — réécrivez avec une alternance. (4) Les quantificateurs possessifs a++ et les groupes atomiques (?>...) sont indisponibles en JS — simulez avec (?=(a+))\1. (5) (?P<name>...) en Python est (?<name>...) en JS. (6) \h pour l'espace horizontal et \v pour le vertical n'existent pas en JS — utilisez [ \t] et [\n\r]. Pour un portage portable, l'explicateur décompose ce que fait chaque jeton afin de pouvoir remplacer la syntaxe non prise en charge par un équivalent. Y a-t-il une taille de texte ou un nombre de correspondances maximal ?
grep -oE ou rg (ripgrep) — ils streament et n'atteindront pas un plafond de rendu d'interface. Pour une analyse ponctuelle de texte énorme, collez une tranche représentative dans ce testeur pour valider le motif, puis exécutez le motif validé sur le fichier complet dans votre shell. Outils connexes
Voir tous les outils →Convertisseur de casse — UPPERCASE, lowercase, camelCase
Traitement de texte
Convertissez instantanément du texte entre UPPERCASE, lowercase, Title Case, Sentence case, camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE et 6 autres formats. Gratuit, navigateur, sans inscription.
Générateur de Lorem Ipsum gratuit
Traitement de texte
Générez du faux texte Lorem Ipsum instantanément — par paragraphe, phrase, mot, octet ou liste. Copiez ou téléchargez en texte brut, HTML, Markdown ou JSON. 100 % gratuit, privé, dans le navigateur. Sans inscription.
Supprimer les lignes en double d'un texte
Traitement de texte
Supprimez les lignes en double d'un texte en ligne — gratuit et instantané, 100 % dans le navigateur. Ignorez la casse ou les espaces, gardez la première ou la dernière occurrence. Sans inscription.
Générateur de slug URL — Sluggifiez tout texte
Traitement de texte
Transformez n'importe quel titre en slug d'URL propre et optimisé SEO instantanément. Translittérez accents et cyrillique, ou conservez les lettres Unicode. 100 % privé, dans votre navigateur.
Trier des lignes alphabétiquement et naturellement
Traitement de texte
Triez des lignes de texte par ordre alphabétique, numérique (ordre naturel) ou par longueur, croissant ou décroissant. Trieur de lignes en ligne, 100 % dans le navigateur. Dédoublonnez, inversez, nettoyez. Sans inscription.
Comparer deux textes — Diff
Traitement de texte
Comparez deux textes instantanément dans votre navigateur. Vue côte à côte, surlignage mot à mot, export en diff unifié, options pour ignorer casse/espaces/lignes vides. 100 % navigateur — aucun upload.