Testeur, débogueur et explicateur d'expressions régulières en ligne
Créez, testez et déboguez vos expressions régulières avec un vrai arbre syntaxique, les positions de chaque groupe de capture, des alertes de retour arrière catastrophique et l'export de code vers dix langages, le tout dans votre onglet.
- Dans [ ] le point est déjà littéral, l'échapper est donc inutile.
Cliquez sur un surlignage pour sélectionner cette correspondance. Maintenez Alt pour voir le texte brut ; F3 et Maj+F3 parcourent les correspondances.
Aucune correspondance
Le motif est valide, il n'apparaît simplement pas dans ce texte. Vérifiez les drapeaux : sans g, seule la première correspondance est signalée.
[\w.%+-]+Répète une fois ou plus — glouton : prend tout ce qu'il peut et ne rend que s'il le faut[\w.%+-]N'importe quel caractère parmi : \w . % + -
@Le caractère « @ »[\w.-]+Répète une fois ou plus — glouton : prend tout ce qu'il peut et ne rend que s'il le faut[\w.-]N'importe quel caractère parmi : \w . -
\.Le caractère « . », pris au pied de la lettre[A-Za-z]{2,}Répète au moins 2 fois — glouton : prend tout ce qu'il peut et ne rend que s'il le faut[A-Za-z]N'importe quel caractère parmi : A–Z a–z
Comment ça marche
Écrivez le motif
Tapez-le, prenez-en un dans la bibliothèque, ou collez un lien qu'on vous a partagé. Le motif est coloré selon ce que chaque morceau est réellement, et les erreurs sont soulignées là où elles se produisent.
Réglez les drapeaux et le mode
Activez g, i, m, s, u, v, y et d, puis choisissez si vous cherchez, remplacez ou découpez. Coupez le mode direct si vous préférez que rien ne s'exécute avant d'appuyer sur le bouton.
Exécutez sans risque
La recherche a lieu dans un Web Worker avec une limite de deux secondes. Chaque correspondance revient avec ses positions et ses groupes, et le panneau vous prévient avant un motif qui pourrait ne jamais finir.
Emportez-le
Copiez la regex, exportez les correspondances en JSON ou CSV, générez le code équivalent pour dix langages, ou envoyez le résultat directement à un autre outil oLoveTools.
Un parseur, pas un tokeniseur
Le motif est analysé en un véritable arbre syntaxique, l'explication montre donc ce qui contient quoi, et ne se trompe pas sur les groupes nommés. Un tokeniseur lit (?<year>\d{4}) comme un groupe de capture suivi d'un quelque chose facultatif ; un parseur y lit le groupe nommé que c'est.
Le moteur tourne là où on peut le tuer
La recherche a lieu dans un Web Worker surveillé par un minuteur. Mesuré ici, (a+)+$ contre 31 caractères prend plus de quatre minutes de CPU pur sur le même moteur que celui de votre navigateur. Dans la page c'est un onglet mort ; dans un worker c'est une exécution terminée au bout de deux secondes.
Des correspondances avec de vraies positions
Le drapeau d est activé en coulisses, chaque groupe de capture porte donc son début et sa fin, pas seulement ce qu'il a attrapé. C'est ce qui permet de peindre les groupes à l'intérieur d'une correspondance surlignée et de sauter de la liste aux caractères exacts.
Il vous prévient avant que ça brûle
Quantificateurs imbriqués sur des caractères qui se recouvrent, quantificateurs autour de quelque chose qui peut ne rien consommer, références arrière vers des groupes inexistants, \p{…} sans le drapeau u, et lookbehind sur un navigateur trop ancien : tout est signalé avant la moindre exécution.
Export vers dix langages
JavaScript, TypeScript, Python, Java, C#, PHP, Go, Rust, Ruby et grep/sed, avec les drapeaux traduits correctement et le remplacement réécrit dans la syntaxe propre à chaque langage. Les extraits Go et Rust le disent quand le motif utilise quelque chose que RE2 ne sait pas faire.
Enchaîné au reste de la suite
Envoyez le texte remplacé, les parties découpées ou les correspondances en JSON directement vers WordFlow, DiffSnap, JSONFlow, CodeCard ou HashBolt, sans passer par votre dossier de téléchargements.
Un testeur de regex qui ne peut pas figer votre navigateur
Les expressions régulières sont la seule chose qu'un testeur doit exécuter avant qu'elles ne soient correctes, et une expression incorrecte peut être pathologique : un motif comme (a+)+$ contre une chaîne qui correspond presque prend un temps exponentiel, et le moteur du navigateur n'a aucun moyen de s'interrompre. RegexFlow exécute chaque recherche dans un Web Worker avec une surveillance de deux secondes. Si l'exécution déborde, le worker est terminé puis remplacé, et vous recevez un message au lieu d'un onglet figé avec votre motif piégé dedans.
Rien ne sort de l'onglet
Le motif, le texte de test, le remplacement et tout fichier que vous ouvrez sont traités entièrement dans votre navigateur : pas d'envoi, pas d'aller-retour serveur. Les fichiers sont lus avec le FileReader du navigateur lui-même. La seule chose qui puisse sortir est un lien de partage, et seulement quand vous appuyez sur le bouton qui le construit.
D'un motif qui marche à du code qui marche
L'analyse de logs qui doit survivre à une ligne malformée, la validation qui doit rejeter autant qu'accepter, un rechercher-remplacer sur tout un dépôt où $1 doit atterrir au bon endroit, et ce moment où vous héritez du motif de quarante caractères de quelqu'un d'autre et devez savoir ce qu'il fait avant d'y toucher. L'arbre d'explication, les positions et le tableau des groupes sont faits pour ce moment-là.
La recherche utilise le RegExp de votre propre navigateur : ce que vous voyez est exactement ce que fera votre JavaScript, y compris les parties qui varient — c'est pourquoi l'outil vérifie la prise en charge du lookbehind et des unicodeSets au lieu de la supposer. Quand vous exportez vers Python, Go ou Rust, les différences sont explicitées au lieu de produire en silence un extrait qui ne compilera pas.
Questions fréquentes
QMon motif ou mon texte de test sont-ils envoyés quelque part ?
Non. Tout s'exécute en JavaScript dans votre onglet, y compris les fichiers que vous ouvrez : ils sont lus avec le FileReader du navigateur et jamais envoyés. Vous pouvez vous déconnecter d'internet, l'outil continue de fonctionner.
QQue se passe-t-il si j'écris un motif qui ne finit jamais ?
Il est tué. La recherche tourne dans un Web Worker surveillé pendant deux secondes ; si le worker ne répond pas à temps, il est terminé et un nouveau prend sa place. Cela compte plus qu'il n'y paraît : mesuré sur le même moteur que celui de votre navigateur, (a+)+$ contre 31 caractères a tourné plus de quatre minutes. Sur le fil principal, c'est un onglet que vous ne récupérez pas.
QQuel moteur d'expressions régulières est utilisé ?
Le RegExp natif de votre navigateur : ce que vous testez est exactement ce que fera votre JavaScript. Là où la prise en charge varie, l'outil vérifie au lieu de supposer : le lookbehind (Safari ne l'a ajouté qu'en 16.4), le drapeau v pour unicodeSets et le drapeau d pour les positions des groupes. S'il en manque un, on vous le dit plutôt que de vous montrer une erreur obscure.
QPourquoi l'explication du motif est-elle un arbre ?
Parce qu'une liste plate ne peut pas dire ce qui est à l'intérieur de quoi, et parce qu'un tokeniseur se trompe là où un parseur ne se trompe pas : (?<year>\d{4}) est un groupe nommé, pas un groupe de capture suivi d'un caractère facultatif. Chaque ligne est liée aux caractères exacts qu'elle décrit, si bien que la survoler les surligne dans le motif.
QLe remplacement gère-t-il $1 et les groupes nommés ?
Oui : de $1 à $99, $<nom>, $& pour la correspondance entière, $` et $' pour le texte autour, et $$ pour un dollar littéral. Chaque jeton que vous tapez est listé en dessous avec ce en quoi il se transformera, et le code généré les réécrit dans la syntaxe propre à chaque cible : \g<nom> pour Python, ${nom} pour Java et C#.
QPuis-je l'utiliser sur un gros fichier ?
Oui, mais au-delà de 40 000 caractères l'outil cesse de réévaluer tout seul et attend que vous appuyiez sur Exécuter : chercher dans un gros fichier à chaque frappe est du travail gaspillé. Vous pouvez aussi couper le mode direct à n'importe quelle taille et rester entièrement en manuel.
QPourquoi le code Go est-il accompagné d'un avertissement ?
Go et Rust utilisent RE2, linéaire par conception et donc dépourvu de lookahead, de lookbehind et de références arrière. Si votre motif en utilise, l'extrait est quand même affiché, mais avec une note disant qu'il ne compilera pas tel quel — ce qui est plus utile qu'un extrait qui échoue en silence.
QQue signifient les couleurs dans le texte de test ?
Chaque correspondance est entourée en fuchsia et la sélectionnée est plus vive. À l'intérieur de celle-ci, les groupes de capture ont leur propre plage violette, vous voyez donc exactement quels caractères ont atterri dans $1. Maintenez Alt pour masquer tous les surlignages et lire le texte tel qu'il est.