Je cours Toolz.dev et passer la majeure partie de ma semaine dans le code plugin WordPress, les API Laravel et les frontaux React. Trouver et remplacer est l'édition unique que j'effectue plus que toute autre, et pourtant neuf fois sur dix je ne veux pas de la version puissante de celui-ci Je ne veux pas d'expression régulière Je veux prendre un morceau de texte, dire chaque occurrence d'un client' ; son ancien nom de produit, et l'échanger contre le nouveau, exactement, sans qu'un caractère errant dans mon terme de recherche corresponde à quelque chose que je n'ai jamais voulu toucher C'est ce que le Outil Rechercher et remplacer fait, et ce guide explique pourquoi la version littérale et ennuyeuse de find and replace est celle que vous souhaitez la plupart du temps.
tl;dr : Cet outil trouve et remplace littéralement sur un bloc de texte collé Le terme de recherche correspond exactement à celui tapé, donc un point correspond à un point et un signe dollar correspond à un signe dollar, sans échappement et sans sur-correspondance accidentelle Vous pouvez ajouter plusieurs règles de recherche et de remplacement et les appliquer en une seule passe, restreindre les correspondances à des mots entiers et activer ou désactiver la sensibilité de la casse. Il indique le nombre de remplacements effectués par chaque règle. Tout s'exécute dans votre navigateur, donc rien de ce que vous collez n'est téléchargé. Lorsque vous avez réellement besoin de caractères génériques et de groupes de capture, un replaceur regex est plutôt le bon outil.
Qu'est-ce que le littéral trouver et remplacer, et pourquoi " ; littéral" ; importe ?
Rechercher et remplacer est l'opération de localiser chaque occurrence d'une chaîne et de l'échanger contre une autre Chaque éditeur l'a. Ce qui varie, c'est la façon dont l'outil interprète votre terme de recherche, et ce choix de conception unique décide si l'outil vous aide ou ruine tranquillement votre texte.
Il y a deux écoles Un replacer à expression régulière traite votre terme de recherche comme un modèle, où certains caractères sont des commandes : un point signifie " ; tout caractère," ; un astérisque signifie " ; répéter," ; un signe dollar signifie " ; fin de ligne," ; et les crochets, parenthèses et barres obliques inverses ont tous une signification particulière Un replacer littéral traite votre terme de recherche comme lui-même, caractère pour caractère, sans signification particulière attachée à quoi que ce soit.
La plupart du temps, littéral est ce que vous voulez, et voici la raison concrète Supposons que vous voulez remplacer la chaîne de version 1.0.0 avec 2.0.0 dans un bloc de texte. Dans un outil regex, ces points sont des caractères génériques, donc votre recherche correspond également 1x0y0, 1a0b0[TRADUCTION], et d'autres cordes que vous n'aviez jamais prévues Il faudrait échapper aux points comme 1\.0\.0 pour le rendre sûr, et si vous oubliez, l'outil fait quelque chose de subtilement mal et ne vous avertit pas Dans un outil littéral, 1.0.0 ressources 1.0.0[TRADUCTION] ?Les points sont des points, et il n'y a rien à échapper et rien à se tromper Il en est de même pour un prix comme $9.99(en), un chemin de fichier avec des barres obliques inverses, ou un extrait de code avec des crochets dedans L'outil littéral les gère toutes sans que vous pensiez à la syntaxe des motifs, car il n'y a pas de syntaxe des motifs.
Quand dois-je utiliser un replaceur regex à la place ?
Littéral est le bon défaut, mais ce n'est pas la bonne réponse à tout, et je préfère vous dire où il s'arrête plutôt que de prétendre qu'il ne s'en sort pas Atteignez un outil de remplacement Regex lorsque la chose que vous faites correspondre est une forme plutôt qu'une chaîne fixe Si vous devez faire correspondre chaque année à quatre chiffres, ou chaque adresse e-mail, ou chaque ligne qui commence par un hachage, ou vous voulez reformater le texte correspondant en en retirant des morceaux avec des groupes de capture, c'est-à-dire un travail de modèle et un outil littéral ne peut pas le faire testeur de regex est l'endroit idéal pour créer et déboguer ce modèle avant de l'exécuter.
La ligne de démarcation est simple Si vous pouvez taper exactement ce que vous cherchez, utilisez littéralement trouver et remplacer et enregistrer vous-même l'échappée Si ce que vous cherchez est une catégorie de choses qui partagent une forme mais pas des caractères exacts, utilisez un regex La plupart des nettoyages de texte quotidiens sont du premier type, c'est pourquoi l'outil littéral couvre la majorité des emplois réels et l'outil regex couvre le reste.
| situation | manier | pourquoi |
|---|---|---|
| Renommer un mot ou une phrase fixe | Littérale trouver et remplacer | Le terme est exact ; aucun modèle nécessaire |
Un terme de recherche contenant des points, des barres obliques ou $ |
Littérale trouver et remplacer | Pas d'évasion, pas de matchs de wildcard accidentels |
| Fixez plusieurs termes différents en une seule fois | Recherche et remplacement littéraux, règles multiples | Chaque règle est exacte et appliquée dans l'ordre |
| Correspond à n'importe quelle année, e-mail ou forme de code | Regex remplacer | Seul un motif peut décrire une catégorie |
| Réorganiser ou reformater le texte correspondant | Regex remplacer | Les groupes de capture retirent et réarrangent les pièces |
| Correspondre aux démarrages de ligne ou aux limites de mots par règle | Regex remplacer | Les ancres et les limites sont des caractéristiques de motifs |
Comment fonctionnent plusieurs règles ?
La fonctionnalité sur laquelle je m'appuie le plus est d'appliquer plusieurs règles à la fois Le vrai nettoyage est rarement un seul échange Lorsque je prends en charge un client' ; s copie, je pourrais avoir besoin de changer un nom de marque, de corriger deux fautes d'orthographe cohérentes et de supprimer un morceau de passe-partout, le tout dans le même bloc de texte Faire cela comme quatre passes distinctes est fastidieux et sujet aux erreurs L'outil vous permet d'ajouter une ligne pour chaque paire de recherche et de remplacement, et il les applique dans l'ordre, chaque règle agissant sur la sortie de celle qui la précède.
Cet ordre vaut la peine d’être compris, car il s’agit d’une fonctionnalité et non d’un accident. Dites que la première règle remplace foo avec baret la règle deux remplace bar avec baz. Parce que la règle deux fonctionne sur le résultat de la règle un, le texte qui a commencé comme foo finit comme baz. La plupart du temps, vos règles sont indépendantes et l'ordre n'a pas d'importance, mais lorsqu'elles interagissent, le comportement est prévisible : de haut en bas, chacune sur le résultat précédent. L'outil vous montre également un décompte pour chaque règle, vous pouvez donc confirmer que la règle trois correspondait à quelque chose et n'est pas assis là à ne rien faire à cause d'une faute de frappe dans le terme de recherche.
Que font les options de mots entiers et de casse ?
Deux options gèrent les cas où un simple échange est trop brutal.
La sensibilité au cas décide si Cat, CAT, et cat sont le même mot ou trois différents Il est désactivé par défaut, car la plupart des nettoyages veulent attraper un terme quelle que soit la façon dont il a été capitalisé. Allumez-le lorsque la capitalisation est tout l'intérêt : lorsque vous souhaitez changer une orthographe d'un nom sans en toucher une autre, ou lorsque vous travaillez avec du code où value et Value sont différents identifiants.
La correspondance de mots entiers décide si votre terme de recherche doit être autonome plutôt que de s'asseoir à l'intérieur d'un mot plus long C'est l'option qui vous évite le désastre classique de recherche et de remplacement Si vous remplacez cat avec dog sans correspondance de mots entiers, vous tournez également category dans dogegory et scatter dans sdogter. Avec la correspondance de mots entiers, seul le mot autonome cat est remplacé et les mots plus longs sont laissés seuls L'outil détecte les limites des mots en utilisant des lettres et des chiffres Unicode plutôt que la définition ASCII uniquement, donc un mot accentué comme café est traité comme un seul mot et ses limites se trouvent correctement, ce qui constitue une implémentation naïve utilisant le classique \b border se tromperait.
Il y a ici un point plus large sur la façon dont les outils texte doivent respecter Unicode, que j'entre dans le Guide des outils de texte: traiter le texte comme des octets plutôt que comme des caractères perçus par l'utilisateur est l'origine d'un nombre surprenant de bogues d'outils.
Comment je l'utilise dans le vrai travail
Quelques motifs reviennent encore et encore Lorsque je colle du texte à partir d'un PDF ou d'un e-mail, il arrive souvent avec un terme écrit de manière incohérente, et une règle littérale corrige chaque instance Lorsque je migre un client' ; s contenu, j'établis une pile de règles pour le nom de marque, l'ancien domaine, et quelques phrases récurrentes, et les exécute toutes en même temps Lorsque je nettoie les données avant de les importer, j'utilise des règles pour supprimer un préfixe répété ou un caractère marqueur parasite, en le remplaçant par rien, ce qui n'est qu'une règle avec un remplacement vide.
Il se marie naturellement avec les autres outils de texte J'aplatis souvent le texte collé avec supprimer les sauts de ligne tout d'abord, exécutez rechercher et remplacer sur le résultat Lorsque le travail consiste vraiment à changer la forme des mots plutôt que de les échanger, le convertisseur de cas est-ce le mieux adapté, et lorsque je dédouble une liste, j'atteins le démonte-ligne dupliqué au lieu de cela. Sachant quel outil est pour quel travail est la moitié de la vitesse, et il y a un aperçu plus large de celui-ci dans le Outils de productivité des développeurs guide.
La dernière chose, et la raison pour laquelle je les ai construits pour les exécuter dans le navigateur, est la confidentialité Le texte que vous collez dans un outil de recherche et de remplacement est souvent une ébauche, un client' ; sa copie non publiée, une transcription ou des données que vous n'avez aucune activité à télécharger sur un serveur aléatoire Tout ce que cet outil fait se passe en JavaScript sur votre propre machine Rien n'est transmis, enregistré ou stocké, et vous pouvez le confirmer en vous déconnectant du réseau et en regardant l'outil continuer à fonctionner.
Un exemple concret : renommer un produit sur une page
Permettez-moi de rendre l'idée à règles multiples concrète, car c'est la partie que les gens sous-utilisent Disons un client rebaptisé de " ; QuickBooks Lite" ; à " ; Ledgerly," ; déplacé de oldsite.com à ledgerly.app& leur ancienne copie a continué à orthographier " ; e-mail" ; avec un trait d'union tandis que le nouveau guide de style veut " ;email." ; Cela représente trois changements indépendants, et je les configurerais en trois règles en un seul passage plutôt qu'en trois voyages à travers l'outil.
Règle que l'on trouve QuickBooks Lite et le remplace par Ledgerly. La règle deux trouve oldsite.com et le remplace par ledgerly.app; remarquez que les points dans les deux domaines sont ici littéraux, donc je n'ai rien à échapper, alors qu'un outil regex traiterait oldsite.com comme correspondant oldsiteXcom aussi. La règle trois trouve e-mail et le remplace par email. Je colle la page, j'exécute les trois, et le décompte à côté de chaque règle me dit que le nom de marque a changé neuf fois, le domaine a changé quatre fois et le correctif du trait d'union a frappé deux fois Si la règle trois montrait zéro, je saurais que la copie ne contenait pas l'orthographe avec trait d'union et je pourrais abandonner la règle.
Les décomptes sont le héros silencieux de ce flux de travail Sans eux, vous êtes sûr que chaque règle a fait son travail ; avec eux, vous obtenez un retour immédiat qu'un terme de recherche était bien ou mal. Un zéro où vous vous attendiez à des correspondances est presque toujours une faute de frappe dans le champ de recherche ou une inadéquation de capitalisation que vous pouvez corriger en basculant la sensibilité de la casse.
Comment fonctionne l'appariement ?
Il vaut la peine de savoir un peu ce qui se passe sous le capot, car cela explique certains comportements que vous pourriez autrement trouver surprenants L'outil scanne le texte de gauche à droite À chaque position il vérifie si votre terme de recherche correspond en commençant par là S'il le fait, et toute condition de mot entier est satisfaite, il écrit le remplacement et saute au-delà du texte adapté S'il ne le fait pas, il copie un caractère en travers et se déplace d'un. C'est pourquoi le remplacement n'est pas récursif dans une seule règle : quand il écrit le remplacement, il continue à scanner après lui, pas à l'intérieur de celui-ci, donc en remplaçant aa avec a dans la chaîne aaa vous donne aa plutôt que de s'effondrer jusqu'à a. Si vous voulez l'effondrement, vous exécutez la règle deux fois, ce qui est exactement ce que fait une deuxième règle avec la même recherche et le même remplacement.
La correspondance insensible à la casse se fait caractère par caractère plutôt qu'en mettant en minuscule d'abord toute la chaîne Cela ressemble à un détail d'implémentation, mais cela importe pour l'exactitude : certains caractères changent de longueur lorsqu'ils sont en minuscules, et comparer des chaînes entières en minuscules ferait tomber les positions hors alignement et corromprait la sortie La comparaison d'un caractère à la fois garde chaque index honnête Les limites des mots entiers sont vérifiées par rapport aux caractères immédiatement avant et après une correspondance, traitant toute lettre ou nombre Unicode comme faisant partie d'un mot, ce qui permet aux scripts accentués et non latins de se comporter comme vous vous en attendriez.
Rien de tout cela n'est quelque chose auquel vous devez penser dans l'utilisation quotidienne Mais c'est la différence entre un outil qui fait tranquillement la mauvaise chose sur une casse de bord et un outil auquel vous pouvez faire confiance avec un client' ; s copie, et c'est la raison pour laquelle je préfère utiliser un replacer littéral spécialement conçu plutôt que de coller du texte dans une boîte regex et d'espérer que mon terme de recherche ne contient pas de caractère spécial.
Questions fréquentes
Comment puis-je trouver et remplacer du texte sans utiliser regex ?
Collez votre texte dans l'outil, tapez la phrase exacte à trouver et la phrase exacte pour la remplacer, et exécutez-la La recherche est littérale, donc chaque caractère que vous tapez est apparié comme lui-même et rien n'a besoin d'être échappé Chaque occurrence est permutée et vous obtenez un compte du nombre de modifications qui ont été faites, le tout dans votre navigateur sans que rien ne soit téléchargé.
Puis-je remplacer plusieurs mots différents en même temps ?
Oui. Ajoutez une ligne pour chaque paire de recherche et de remplacement et l'outil les applique en séquence, chacun agissant sur le résultat de la règle qui la précède. C'est ainsi que vous renommez une marque, corrigez deux fautes d'orthographe et supprimez un morceau de passe-partout en un seul passage, et chaque règle affiche son propre nombre de remplacements afin que vous puissiez voir qu'il correspond.
Quelle est la différence entre ceci et un outil de remplacement de regex ?
Cet outil correspond littéralement à votre terme de recherche, donc un point ne correspond qu'à un point et un signe dollar qu'à un signe dollar, sans syntaxe de motif à apprendre et sans sur-correspondance accidentelle Un outil de remplacement regex traite le terme de recherche comme un motif avec des caractères génériques, des ancres et des groupes de capture, ce qui correspond à une catégorie de choses comme n'importe quelle année ou n'importe quelle adresse e-mail Utilisez littéral lorsque vous pouvez taper la chose exacte que vous voulez ; utilisez regex lorsque vous correspondez à une forme.
Comment la correspondance de mots entiers arrête-t-elle les remplacements indésirables ?
Avec la correspondance de mots entiers sur, le terme de recherche n'est remplacé que lorsqu'il se tient seul plutôt qu'à l'intérieur d'un mot plus long Remplacement cat puis change cat Mais part category, scatter, et located intact. L'outil utilise des limites compatibles Unicode, de sorte que les mots accentués et non anglais sont gérés correctement plutôt que d'être divisés au mauvais endroit.
Trouvera et remplacera-t-il les sauts ou l'espacement de mes lignes ?
Non. Seuls les caractères que vous avez recherchés sont modifiés Les sauts de ligne, l'indentation, l'espacement et la ponctuation autour de vos correspondances sont laissés exactement tels quels Si le remplacement est plus long ou plus court que l'original, le texte environnant change naturellement, mais rien d'autre n'est reformaté ou reflumé.
Y a-t-il une limite à la quantité de texte que je peux traiter ?
Il n'y a pas de limite fixe au-delà de votre navigateur' ; s mémoire Parce que le travail se passe sur votre appareil plutôt que sur un serveur, des blocs de centaines de milliers de caractères traitent presque instantanément et il n'y a pas de plafond de taille de téléchargement Pour quelque chose de la taille d'un livre entier vous pouvez remarquer une brève pause, mais les documents ordinaires sont effectivement instantanés.
Mon texte est-il téléchargé ou stocké n'importe où ?
Non. Le texte est traité par JavaScript dans votre navigateur et n'est jamais transmis, enregistré ou stocké. Vous pouvez le vérifier en ouvrant l'onglet réseau pendant que vous exécutez un remplacement, ou en vous déconnectant d'Internet, car l'outil continue de fonctionner hors ligne une fois la page chargée. C'est la raison pour laquelle vous utilisez un outil côté client pour les brouillons, la copie client et tout ce qui est privé.



