À propos de cet outil
Les expressions régulières reviennent sans cesse dans le code de test : vérifier une ligne de log, extraire un ID d’une réponse, valider un format, masquer des secrets dans les rapports. Ce testeur utilise le moteur RegExp JavaScript du navigateur : les résultats correspondent à ce que feront Playwright, Cypress, Jest et Node. Les correspondances sont surlignées pendant la saisie, chaque groupe capturant (numéroté et nommé) est listé avec sa position, et l’aperçu de remplacement montre le résultat de String.replace. L’analyse s’exécute dans un worker en arrière-plan arrêté au bout de 1,5 seconde : un motif à backtracking catastrophique ne peut pas figer la page.
Mode d’emploi
- Saisissez un motif sans les barres obliques autour et activez les flags nécessaires (g, i, m, s, u, y).
- Collez une chaîne de test, ou cliquez sur un des motifs QA pour charger un motif avec un texte d’exemple correspondant.
- Vérifiez le texte surligné et le tableau des correspondances pour les groupes et les indices.
- Activez « Replace preview » (aperçu du remplacement) pour essayer un remplacement avec $1, $<name> ou $&.
FAQ : Testeur de regex
Un motif qui fonctionne ici fonctionnera-t-il en Java ou en Python ?
Le plus souvent, mais pas toujours. Les bases sont communes, mais les groupes nommés s’écrivent (?<name>) en JavaScript et Java et (?P<name>) en Python, la prise en charge du lookbehind varie, et les flags s et y sont propres à JavaScript. Testez dans le langage cible pour tout ce qui est avancé.
Pourquoi le testeur s’est-il arrêté sur un timeout ?
Les motifs avec des quantificateurs imbriqués, comme (a+)+ ou (.*)*, peuvent prendre un temps exponentiel sur des entrées qui correspondent presque. C’est le backtracking catastrophique, et le même motif pourrait bloquer une exécution de tests ou un serveur (ReDoS). Rendez le quantificateur interne plus précis ou supprimez l’imbrication.
Pourquoi ne vois-je qu’une seule correspondance ?
Sans le flag g (global), une regex JavaScript s’arrête après la première correspondance. Activez g pour trouver toutes les occurrences ; c’est aussi ce qu’exigent String.prototype.matchAll et replaceAll.