Command Palette

Search for a command to run...

Regex Remplacer : Rechercher et remplacer par une expression régulière sans toucher votre éditeur

Regex Remplacer : Rechercher et remplacer par une expression régulière sans toucher votre éditeur

T
Toolz Team
|Aug 23, 2026|17 min Lire

Fait partie de la collection regex

La tâche qui m'a fait construire ça était ennuyeuse, c'est exactement pourquoi ça valait la peine d'être automatisé Un client m'a remis une exportation de 4 000 lignes où chaque date était écrite à l'américaine, 01/15/2024« , et le système dans lequel il allait voulait l'ISO », 2024-01-15. Une simple recherche et remplacement ne pouvait pas y toucher, car il n'y avait pas de chaîne fixe à rechercher - les dates étaient toutes différentes. Ce qu'ils partageaient était un forme: deux chiffres, une barre oblique, deux chiffres, une barre oblique, quatre chiffres C'est précisément le genre de chose qu'une expression régulière correspond, et précisément le genre de chose qu'un remplacement de regex réécrit en une seule passe J'ai collé le fichier dans un outil de grattage, écrit une expression, et toute l'exportation a retourné le format en moins d'une seconde.

C'est le travail gratuit Regex Remplacer tool le fait, et ce guide est la version longue de comment bien l'utiliser Je vais aborder ce qu'est réellement un remplacement de regex, comment les backreferences de groupe de capture vous permettent de restructurer le texte au lieu de seulement le supprimer, ce que tout jeton de remplacement spécial signifie, et les erreurs qui font trébucher les gens Il se trouve à côté du testeur de regex J'ai écrit sur séparément - le testeur vous dit ce qu'un motif correspond, et cet outil réécrit ce qu'il correspond Si les expressions régulières elles-mêmes sont nouvelles pour vous, commencez par le guide complet des outils de codage et reviens.

tl;dr : Un remplacement regex correspond texte par motif et réécrit chaque correspondance à l'aide d'une chaîne de remplacement Enroulez les parties que vous souhaitez réutiliser entre parenthèses pour créer des groupes numérotés, puis référencez-les dans le remplacement avec $1, $2[traduction], et ainsi de suite - le motif (\d{4})-(\d{2})-(\d{2}) avec remplacement $3/$2/$1 tourne 2024-01-15 dans 15/01/2024. Allumez le g drapeau pour remplacer chaque correspondance, laisser le remplacement vide pour supprimer les correspondances et utiliser $<name> pour les groupes nommés. Le Regex Remplacer l'outil s'exécute entièrement dans votre navigateur et affiche le nombre de remplacements en direct.

Qu'est-ce qu'un remplacement regex ?

Un find-and-replace ordinaire fonctionne sur du texte littéral : vous tapez le mot exact que vous recherchez et le mot exact à mettre à sa place Il échoue au moment où la chose que vous voulez changer n'est pas une chaîne fixe mais un motif - une date dans l'une des cent formes, un numéro de téléphone, une balise HTML, une course d'espacement de fin, un nom de variable qui suit une convention Une expression régulière décrit ce motif, et un remplacement de regex le couple avec un modèle qui dit comment chaque correspondance doit être réécrite.

Le mécanisme comporte deux moitiés Le motif est une expression régulière avec laquelle le moteur scanne votre texte, trouvant chaque endroit où la forme se produit Le remplacement est une chaîne qui est remplacée pour chaque match Dans le cas le plus simple, le remplacement est du texte brut et chaque correspondance devient la même chose - utile pour normaliser, disons, chaque série d'onglets et d'espaces en un seul espace. Le cas puissant est celui où le remplacement renvoie à des parties de ce qui a été adapté, donc la sortie est construite à partir de l'entrée plutôt que d'être une constante fixe. C'est ce qui transforme un remplacement de regex d'une suppression et d'un retype contondants en un véritable outil de restructuration.

Sous le capot, le Regex Remplacer l'outil utilise JavaScript RegExp moteur et le String.prototype.replace méthode que chaque navigateur et Node.js expédie Cela compte pour une raison pratique : le comportement que vous voyez dans l'outil est identique au comportement que vous obtiendrez si vous collez le même motif et le même remplacement dans votre propre code JavaScript ou TypeScript Il n'y a pas de saveur distincte à apprendre et pas de surprise lorsque vous passez de l'outil de grattage à la production La syntaxe de remplacement que l'outil accepte - $1, $&, $<name> et le reste - est la syntaxe exacte que la norme définit, documentée sur MDN&#39 ;s Référence String.replace.

Comment fonctionnent les backreferences de groupe de capture ?

C'est l'idée la plus utile dans le remplacement du regex, et cela vaut la peine d'être ralenti. Lorsque vous mettez une partie d'un motif entre parenthèses, vous créez un groupe capture. Le moteur se souvient du texte auquel le groupe correspondait et numérote les groupes de gauche à droite en commençant par un. Dans la chaîne de remplacement, $1 signifie &quot ; insérer quel que soit le premier groupe capturé, &quot ; $2 le second, et ainsi de suite jusqu'à $99.

L'exemple de date le rend concret Le motif (\d{4})-(\d{2})-(\d{2}) comporte trois groupes : l'année à quatre chiffres, le mois à deux chiffres et le jour à deux chiffres. Quand il correspond 2024-01-15, le groupe un tient 2024, le groupe deux tient 01et le groupe trois tient 15. Un remplacement de $3/$2/$1 assemble ensuite une nouvelle corde à partir de ces pièces dans un ordre différent et avec différents séparateurs, produisant 15/01/2024. Rien n'a été supprimé et retapé - la sortie est littéralement reconstruite à partir des fragments capturés Réorganisez les jetons, modifiez la ponctuation entre eux, enveloppez-les dans un autre texte, et vous avez reformaté chaque date du fichier avec une seule expression.

Les groupes nommés sont la même idée avec des étiquettes lisibles Au lieu de compter les parenthèses, vous écrivez (?<year>\d{4}) et faites-y référence dans le remplacement sous le nom de $<year>. Pour un motif avec deux ou trois groupes, les chiffres sont bons, mais une fois que vous jonglez avec cinq ou six, les noms rendent le motif et le remplacement beaucoup plus faciles à lire et à modifier plus tard. L'outil prend en charge les deux de manière interchangeable, afin que vous puissiez mélanger $1 et $<name> dans le même remplacement si vous le souhaitez Lorsque vous assemblez pour la première fois un motif et que vous n'êtes pas encore sûr des groupes dont vous avez besoin, le Regex Builder vous aide à le construire pièce par pièce avant de l'apporter ici pour exécuter le remplacement.

Que signifient les jetons de remplacement spéciaux ?

Le signe dollar est spécial à l'intérieur d'une chaîne de remplacement, et il introduit un petit ensemble de jetons au-delà des groupes numérotés et nommés Les connaître vous évite d'atteindre un motif plus compliqué que ce dont vous avez besoin.

$& insère l'intégralité de la sous-chaîne correspondante C'est ce que vous voulez lorsque vous enveloppez ou annotez des correspondances plutôt que de les reconstruire - un modèle de \b\w+@\w+\.\w+\b avec un remplacement de <$&> met des crochets d'angle autour de chaque adresse e-mail sans que vous ayez à capturer le tout dans un groupe. $\`` (a backtick) inserts everything *before* the match, and &#39;(an apostrophe) inserts everything *after* it; these are rarely needed but occasionally exactly right. And because$is special, outputting a literal dollar sign requires doubling it:$$in the replacement produces a single$` in the output, ce qui compte le jour où vous reformatez la monnaie.

Il y a un idiome de suppression qui vaut la peine d'être engagé dans la mémoire : un remplacement vide supprime chaque correspondance Avec le drapeau global activé et le champ Remplacer laissé vide, l'outil supprime chaque occurrence du motif du texte C'est la façon la plus propre de supprimer quelque chose - toutes les balises HTML avec <[^>]+>, chaque espace arrière avec +$ en mode multiligne, tous les non-chiffres d'un numéro de téléphone avec \D. Vous ne remplacez pas par un espace ou un espace réservé ; vous remplacez par rien et le match disparaît tout simplement.

Quels drapeaux comptent pour un remplacement ?

Les drapeaux sur un regex changent la façon dont il est appliqué, et deux d'entre eux dominent le travail de remplacement quotidien Le reste est situationnel mais parfois décisif.

Le drapeau mondial, g(en anglais), est celui que vous allez le plus basculer Sans lui, JavaScript&#39 ; s replace change uniquement le premier correspondez et laissez le reste du texte seul - c'est standard String.replace comportement et surprises les personnes qui s'attendent à un remplacement. Tournez g on et chaque correspondance dans le texte est réécrite L'outil est par défaut global on, car tout remplacer est ce que les gens veulent dire dix-neuf fois sur vingt, mais le toggle est là pour les fois où vous voulez vraiment toucher seulement la première occurrence Le drapeau de cas d'ignorance, i« , fait correspondre le modèle quel que soit le cas des lettres, donc » error aussi matchs Error et ERROR - essentiel lorsque vous normalisez les niveaux de journaux ou rangez une capitalisation incohérente.

Le drapeau multiligne, m1, change ce que les ancrages ^ et $ moyen : avec ça allumé, ils correspondent au début et à la fin de chacun axe plutôt que du texte entier, ce que vous voulez lorsque vous supprimez les espaces de fin ou préfixe chaque ligne. Le drapeau dotAll, s(traduit), permet au point de correspondre aux caractères de nouvelle ligne, afin qu'un motif puisse s'étendre sur les sauts de ligne - utile pour réécrire les blocs multi-lignes. Le u (unicode) et y les drapeaux (collants) sont destinés aux cas avancés : u permet une manipulation correcte des caractères en dehors du plan de base et de certaines formes d'échappement, et y ancre chaque tentative de match à la position exacte après la précédente Le tableau de comparaison ci-dessous résume le moment où chacun gagne sa place.

drapeau Lettre Effet sur un remplacement Usage typique
global g Remplacez chaque match au lieu du premier Presque tous les remplaçants
Ignorer l'affaire i Correspondre quel que soit le cas de la lettre Normalisation des niveaux de journaux, mise à niveau de la capitalisation
Multiligne m ^ et $ ancrer à chaque ligne Lignes de préfixation, déshabillage des espaces arrière
DotAll s Le point correspond également aux nouvelles lignes Réécriture de blocs multilignes
Unicode u Gestion correcte des caractères astraux et \u{...} Emoji, écritures non latines
Collant y Correspondre uniquement à la position actuelle Tokenisers, analyse séquentielle stricte

Quand dois-je utiliser regex replace au lieu d’une simple recherche et remplacement ?

La ligne de démarcation est simple : utilisez un simple find-and-replace lorsque vous connaissez le texte exact, et atteignez regex replacez lorsque vous connaissez la forme mais pas le texte exact Si vous changez chaque 2023 à 2024[TRADUCTION], un remplacement ordinaire est plus rapide et plus sûr Si vous changez toutes les années à quatre chiffres, quelle que soit la valeur, seul un modèle peut exprimer cela.

Trois familles de tâches tombent clairement du côté du regex La première est reformatage, où le contenu reste le même mais son arrangement change - dates, numéros de téléphone, noms écrits &quot ; Dernier, Premier&quot ; que vous voulez comme &quot ;Premier Dernier.&quot ; Capturer des groupes plus un remplacement réorganisé gérer tout cela Le second est décapage en vrac, où vous supprimez tout ce qui correspond à un motif - balises, commentaires, caractères de contrôle, espaces supplémentaires - en remplaçant par rien Le troisième est édition conditionnelle à l'échelle, où vous enveloppez, préfixez ou annotez chaque occurrence d'un motif, en utilisant $& pour garder la correspondance et y ajouter Lorsque la transformation que vous vous décrivez contient le mot &quot ; every&quot ; suivi d'une description plutôt que d'une chaîne littérale, vous êtes en territoire regex-replace.

Il y a aussi un argument de workflow Faire ces modifications dans votre éditeur de code&#39 ; s find-and-replace fonctionne, mais il modifie le fichier en place, ce qui signifie qu'une erreur est une erreur dans votre fichier réel L'exécution de la transformation dans un outil de grattage vous permet d'abord de voir la sortie et le nombre de remplacements avant de commettre quoi que ce soit, puis de coller le résultat vérifié en retour Parce que le Regex Remplacer l'outil s'exécute entièrement dans votre navigateur et ne télécharge jamais ce que vous collez, il est sûr à utiliser même lorsque le texte est un journal de production ou une exportation client - un point que je fais valoir dans son intégralité dans le guide de confidentialité des données pour les outils en ligne.

Quelles sont les erreurs courantes avec regex replace ?

Le plus fréquent est d'oublier le drapeau mondial et de se demander pourquoi seul le premier match a changé Si votre remplaçant semble n'avoir presque rien fait - un montage où vous vous attendiez à des dizaines - vérifiez ça g est allumé C'est un voyage tellement courant que l'outil l'allume par défaut, mais au moment où vous l'éteignez pour cibler une seule correspondance, n'oubliez pas de le faire revenir en arrière.

La seconde est littérale $1 apparaissant dans la sortie où vous vous attendiez à du texte capturé Cela signifie presque toujours que le groupe auquel vous faites référence n'existe pas - votre modèle n'a pas de premier jeu de parenthèses, il n'y a donc rien pour $1 pour remplacer, et le moteur laisse le jeton tel quel Le correctif est d'envelopper la partie que vous souhaitez réutiliser entre parenthèses pour créer le groupe, et de compter les groupes de gauche en commençant par un. Un piège associé ne compte pas correctement lorsque votre modèle a des groupes imbriqués ou facultatifs ; lorsque la numérotation devient confuse, passez à des groupes nommés afin que la référence soit sans ambiguïté.

La troisième erreur est un modèle qui correspond à plus que ce que vous aviez prévu, généralement parce qu'un quantificateur est gourmand. Un modèle comme <.+> destiné à correspondre à une balise HTML correspondra volontiers à partir de la première < au dernier > sur la ligne, avaler tout entre deux tags Le remède est un quantificateur non gourmand, des <.+?>(ou une classe de caractères plus précise), <[^>]+>. C'est exactement la situation dans laquelle vous vérifiez le modèle dans le testeur de regex tout d’abord, regardez ce qu’il met en évidence, puis exécutez le remplacement - une habitude guide regex-testeur passe en détail Le nombre de remplacements indiqué dans l'outil est votre autre sauvegarde : s'il signale beaucoup plus ou beaucoup moins de remplacements que le nombre de choses que vous vouliez changer, le modèle est erroné, pas l'outil.

Un exemple concret : reformater les noms et dénuder le bruit

Laissez-moi parcourir un petit travail bout à bout, car voir les pièces fonctionner ensemble corrige l'idée mieux que n'importe quelle règle. Supposons que vous ayez une liste de contacts exportés sous forme Doe, Jane et Smith, John1, un par ligne, et vous les voulez comme Jane Doe et John Smith.

La forme de chaque ligne est : quelques caractères de mot, une virgule, un espace, puis plus de caractères de mot Comme un motif qui est (\w+), (\w+)« , avec le nom de famille capturé dans le groupe un et le prénom dans le groupe deux. Le remplacement qui les échange et laisse tomber la virgule est le suivant » $2 $1 - groupe deux, un espace, groupe un. Collez la liste dans le Regex Remplacer outil, saisissez ce modèle et ce remplacement, laissez le drapeau global activé, et chaque ligne passe à &quot ;Premier dernier et quot ; à la fois. Le nombre de lignes de remplacement vous indique combien de lignes ont été touchées, que vous pouvez vérifier en toute santé par rapport au nombre de contacts.

Maintenant, dites que la même exportation a des espaces de fin sur certaines lignes que vous souhaitez également quitter. C'est un deuxième remplacement distinct : le modèle +$ avec le drapeau multiligne sur donc $ correspond à la fin de chaque ligne, et un remplacement vide pour que les espaces correspondants soient supprimés plutôt que remplacés Exécutez-le après l'échange de nom et que le fichier soit propre L'approche en deux passes - un remplacement à restructurer, un à dépouiller - est typique, et parce que chaque passe vous montre sa sortie et compte avant de le copier, vous ne devinez jamais si la transformation a fait ce que vous vouliez dire Lorsque le texte remodelé a besoin d'une différence visuelle finale par rapport à l'original pour confirmer que rien d'autre n'a été déplacé, collez les deux versions dans le Diff de texte outil. Pour le kit plus large d'utilitaires quotidiens dans lequel cela s'intègre, le Boîte à outils pour les développeurs Web recueille ceux que j'atteins pour la plupart.

Questions fréquentes

Comment puis-je trouver et remplacer par une expression régulière en ligne ? Entrez votre motif dans le champ Rechercher sans barre oblique, écrivez le remplacement dans le champ Remplacer, choisissez vos drapeaux et collez votre texte La sortie réécrite apparaît instantanément et montre combien de remplacements ont fonctionné Tout se passe dans votre navigateur, donc rien n'est téléchargé.

Comment fonctionnent les backreferences de groupe de capture dans le remplacement ? Les parenthèses dans votre modèle créent des groupes numérotés, et vous les réutilisez dans le remplacement avec 1 $, 2 $, et ainsi de suite Par exemple, le modèle (\d{4}) - (\d{2}) - (\d{2}) avec le remplacement 3 $/2 $/1 tourne 2024-01-15 en 15/01/2024. groupes nommés comme ( ?\d{4}) sont référencés comme $.

Comment remplacer tous les matchs au lieu du premier ? Activer le drapeau g (global) Sans lui, JavaScript remplace uniquement la première correspondance, exactement comme la méthode String.replace se comporte Avec g activé, chaque correspondance dans le texte est remplacée, ce qui est ce dont la plupart des tâches de remplacement-tous ont besoin.

Comment supprimer chaque correspondance au lieu de la remplacer ? Laissez le champ Remplacer vide Avec le drapeau global activé, chaque correspondance est supprimée du texte C'est le moyen le plus propre de supprimer les balises, les courses d'espaces ou les caractères indésirables qui partagent un motif.

Que signifient les jetons spéciaux $&amp ;, backtick et apostrophe dans le remplacement ? $&amp ; insère la sous-chaîne entière appariée, une backtick insère le texte avant la correspondance et une apostrophe insère le texte après celui-ci Pour afficher un signe dollar littéral, écrivez $$. Ceux-ci suivent la chaîne JavaScript standard.remplacez les modèles de remplacement spéciaux.

Quelle saveur regex utilise cet outil ? Il utilise le moteur RegExp JavaScript (ECMAScript) intégré à votre navigateur, qui est identique à celui de Node.js. Les résultats ici correspondent à la façon dont le même modèle et le même remplacement se comportent en JavaScript et TypeScript. JavaScript regex diffère de PCRE, Python re et Java dans certaines fonctionnalités avancées.

Pourquoi mon remplaçant produit-il un 1 $ littéral au lieu du texte capturé ? Un $1 littéral dans la sortie signifie généralement que votre motif n'a pas de premier groupe de capture, donc il n'y a rien pour $1 à référencer Enroulez la partie que vous souhaitez réutiliser entre parenthèses pour créer le groupe, et comptez les groupes de gauche à droite en commençant par 1.

Est-il sécuritaire d'exécuter regex replace sur des données sensibles ? Oui. Toute correspondance et remplacement se produit en JavaScript dans votre navigateur, donc aucun modèle, remplacement ou texte n'est envoyé à un serveur, rien n'est enregistré et l'outil fonctionne avec votre connexion désactivée. Vous pouvez reformater en toute sécurité les fichiers journaux, les données personnelles ou les formats propriétaires.


Ce guide accompagne le gratuit Regex Remplacer outil sur Toolz.dev - pas d'inscription, pas de téléchargement, fonctionne hors ligne.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!