Testeur de regex

RSS

Construisez et testez des expressions régulières avec surlignage des correspondances en direct, groupes de capture et aperçu des remplacements.

Fonctionne à 100 % dans votre navigateur. Rien de ce que vous collez n'est envoyé ni stocké.
//

Correspondances

Détail des correspondances

#CorrespondanceIndexGroupes

Remplacer

Comment utiliser le testeur de regex

  1. Saisissez votre motif sans les barres obliques qui l’entourent, par exemple \d{3}-\d{4}.
  2. Activez les drapeaux dont vous avez besoin (g, i, m, s, u, y).
  3. Collez un texte de test. Les correspondances sont surlignées en direct et chaque groupe de capture est listé.
  4. Saisissez éventuellement une chaîne de remplacement, avec $1 ou $<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

DrapeauNomEffet
gglobalTrouve toutes les correspondances au lieu de s’arrêter après la première.
iignoreCaseCorrespondance insensible à la casse.
mmultiline^ et $ correspondent au début et à la fin de chaque ligne.
sdotAll. correspond aussi aux sauts de ligne.
uunicodeTraite le motif comme des points de code Unicode ; active les échappements de propriétés \p{...}.
ystickyNe 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 drapeau u, \w et \d ne 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 \1 ou \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

UsageMotifLimites
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 g mémorise lastIndex, si bien qu’appeler test() à répétition sur le même objet alterne entre true et false.
  • 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.
Astuce : n’analysez pas des formats structurés comme le HTML, le JSON ou le YAML avec des expressions régulières. Utilisez un analyseur, ou nos outils formateur et validateur JSON et formateur HTML pour les inspecter.

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

Aucune évaluation pour l’instant

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.

Copié dans le presse-papiers