Comment utiliser le testeur de regex
- Saisissez votre motif sans les barres obliques qui l’entourent, par exemple
\d{3}-\d{4}. - Activez les drapeaux dont vous avez besoin (
g,i,m,s,u,y). - Collez un texte de test. Les correspondances sont surlignées en direct et chaque groupe de capture est listé.
- Saisissez éventuellement une chaîne de remplacement, avec
$1ou$<name>pour les groupes, afin d’en prévisualiser le résultat.
Le testeur utilise le moteur de regex JavaScript de votre propre navigateur. Vos motifs et vos données de test restent sur votre appareil et ne sont ni envoyés ni stockés.
La syntaxe des regex JavaScript en un coup d’œil
Les variantes d’expressions régulières diffèrent d’un langage à l’autre. Cet outil utilise la variante JavaScript (ECMAScript), les résultats correspondent donc à ce que font RegExp, String.prototype.match et replace dans les navigateurs et dans Node.js. La plupart de la syntaxe se retrouve en Python, PCRE et Java, mais des détails tels que la syntaxe des groupes nommés et la prise en charge du lookbehind varient.
Drapeaux
| Drapeau | Nom | Effet |
|---|---|---|
g | global | Trouve toutes les correspondances au lieu de s’arrêter après la première. |
i | ignoreCase | Correspondance insensible à la casse. |
m | multiline | ^ et $ correspondent au début et à la fin de chaque ligne. |
s | dotAll | . correspond aussi aux sauts de ligne. |
u | unicode | Traite le motif comme des points de code Unicode ; active les échappements de propriétés \p{...}. |
y | sticky | Ne correspond qu’à la position donnée par lastIndex. |
Éléments de base
- Classes de caractères :
[abc], plages[a-z], négation[^0-9], raccourcis\d(chiffre),\w(caractère de mot),\s(espace blanc) et leurs négations\D,\W,\S. Sans le drapeauu,\wet\dne couvrent que l’ASCII. - Quantificateurs :
*(0 ou plus),+(1 ou plus),?(0 ou 1),{n},{n,},{n,m}. Ajoutez?pour les rendre paresseux :.*?. - Groupes :
(...)capture,(?:...)regroupe sans capturer,(?<year>\d{4})crée un groupe nommé, et\1ou\k<year>y fait référence. - Ancres :
^,$et la limite de mot\b. - Assertions de contexte (lookarounds) :
(?=...)lookahead positif,(?!...)lookahead négatif,(?<=...)lookbehind positif,(?<!...)lookbehind négatif. Elles testent le contexte sans consommer de caractères.
// Montants précédés d’un signe dollar, sans le signe
/(?<=\$)\d+(?:\.\d{2})?/g "Total: $42.50" → "42.50"
// Reformater des dates avec des groupes nommés
"2024-03-15".replace(/(?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})/, "$<d>.$<m>.$<y>")
// "15.03.2024"
Motifs courants
| Usage | Motif | Limites |
|---|---|---|
| E-mail (simple) | ^[^\s@]+@[^\s@]+\.[^\s@]+$ | Une simple vérification de cohérence. La syntaxe complète d’une adresse est bien plus complexe ; confirmez en envoyant un e-mail. |
| Adresse IPv4 | ^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$ | Rejette les octets supérieurs à 255 et les zéros initiaux. Ne gère pas l’IPv6. |
| Date (AAAA-MM-JJ) | ^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$ | Accepte des dates impossibles comme 2023-02-31. Validez avec une bibliothèque de dates. |
| URL (http/https) | ^https?:\/\/[^\s/$.?#][^\s]*$ | Vérification souple. Utilisez le constructeur URL pour une vraie analyse. |
Pour les adresses IP en particulier, le convertisseur d’adresse IP analyse et convertit à la fois l’IPv4 et l’IPv6.
Pièges
Retour arrière catastrophique (catastrophic backtracking)
Des quantificateurs imbriqués ou qui se chevauchent peuvent amener un moteur à retour arrière comme celui de JavaScript à essayer un nombre exponentiel de chemins lorsqu’une correspondance échoue. Quelques dizaines de caractères peuvent figer un onglet de navigateur ou, sur un serveur, permettre une attaque par déni de service (ReDoS) :
/^(a+)+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!") // peut se bloquer
/^a+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!") // instantané
Évitez les motifs comme (a+)+, (a|a)* ou (.*)*, gardez des alternatives mutuellement exclusives et soyez précis : [^"]* est plus sûr que .* entre guillemets.
Autres pièges
- Une regex avec le drapeau
gmémoriselastIndex, si bien qu’appelertest()à répétition sur le même objet alterne entretrueetfalse. - Lorsque vous construisez un motif à partir d’une chaîne, les barres obliques inverses doivent être doublées :
new RegExp("\\d+"). - Oublier
^et$signifie qu’un validateur accepte toute saisie qui contient simplement une correspondance.
Questions fréquentes
Pourquoi ma regex fonctionne-t-elle ici mais pas en Python ou en PHP ?
Les variantes diffèrent. Python écrit les groupes nommés (?P<name>...) et ne prend en charge que le lookbehind de largeur fixe ; le PCRE de PHP entoure les motifs de délimiteurs. Les règles d’échappement des chaînes littérales diffèrent aussi d’un langage à l’autre.
Quelle est la différence entre quantificateurs gourmands et paresseux ?
Les quantificateurs gourmands (.*) correspondent au maximum puis reculent ; les paresseux (.*?) correspondent au minimum. Sur <b>x</b>, <.*> correspond à toute la chaîne tandis que <.*?> ne correspond qu’à <b>.
JavaScript prend-il en charge le lookbehind ?
Oui, depuis ES2018, et contrairement à de nombreux moteurs, il autorise un lookbehind de longueur variable. Tous les grands navigateurs actuels le prennent en charge.
Comment faire correspondre un point ou un crochet littéral ?
Échappez-le avec une barre oblique inverse : \., \[, \(. Dans une classe de caractères, la plupart des caractères sont littéraux, [.] correspond donc aussi à un point.
Mis à jour
Commentaires
Connectez-vous pour noter cet outil.
Partagez une astuce, posez une question ou racontez comment l’outil a fonctionné pour vous.
Aucun commentaire pour l’instant. Soyez le premier à raconter votre expérience.