Texte et outils quotidiens · Boîte à outils de texte
Fonctionnement de la recherche par mot entier : limites des mots et problème chat/chien
· Comment ça marche
expression régulière rechercher et remplacer édition de texte
Explique ce qu'est une limite de mot dans les expressions régulières JavaScript, pourquoi « chat » ne doit pas correspondre à l'intérieur de « concaténer » et pourquoi une alternance comme chat|chien doit être regroupée avant que les limites ne soient ajoutées.
Le changement de nom qui a changé « concaténer » – pourquoi une simple recherche et remplacement d'un mot court endommage les mots plus longs
Le changement de nom d'un produit semble inoffensif jusqu'à ce qu'un nom court apparaisse à l'intérieur de mots sans rapport. Remplacer chaque occurrence de `cat` par `lynx` change `concatenate` en `conlynxenate`, même si aucun éditeur n'avait l'intention de renommer une partie de ce verbe. Un nombre de correspondances ne peut à lui seul protéger le document lorsque la règle de recherche est trop large.
La correspondance de mots entiers restreint la règle avant tout remplacement. Dans ToolAcre, l'activation du mot entier rend `cat` autonome éligible tout en laissant les mêmes lettres à l'intérieur de `concatenate` intactes. La distinction est structurelle plutôt que basée sur un dictionnaire : le moteur d'expression régulière vérifie les caractères immédiatement à côté de chaque correspondance possible.
Que signifie \b — la position de largeur nulle entre un caractère de mot et un caractère autre qu'un mot
Dans une expression régulière JavaScript, `` marque une limite de mot de largeur nulle. Il ne consomme aucune lettre, aucun espace ou ponctuation. Au lieu de cela, il réussit à une position où un côté est un caractère de mot et l'autre côté ne l'est pas, y compris le début ou la fin du texte lorsque le caractère adjacent est qualifié de caractère de mot.
La catégorie `w` de JavaScript fournit les caractères de mot pertinents pour cette implémentation : lettres ASCII, chiffres et trait de soulignement. Par conséquent, `cat` correspond à `cat` à côté des espaces, des virgules ou des fins de ligne, mais pas au segment `cat` à l'intérieur de `concatenate`, car les deux côtés de ce segment continuent à travers les caractères des mots et aucune limite n'existe à cet endroit.
Mot entier en mode littéral : le texte recherché est d'abord échappé, puis entouré de limites
Lorsque Regex est désactivé, ToolAcre échappe d'abord à chaque métacaractère d'expression régulière dans le texte de recherche. Un point reste un point littéral, les parenthèses restent des parenthèses littérales et un signe plus reste un signe plus. Ce n'est qu'après cette étape d'échappement que le mot entier enveloppe la source résultante, de sorte que la ponctuation de l'utilisateur ne peut pas devenir silencieusement une syntaxe regex.
Le wrapper est `(?:… )` sans l'espace affiché : le `(?:…)` interne est un groupe sans capture. Pour un littéral simple tel que `cat`, l'effet est équivalent à `cat`. Le regroupement est toujours important car un chemin de compilation doit gérer en toute sécurité des termes simples et des alternatives plus compliquées sans modifier la numérotation des groupes de capture.
Mot entier en mode regex - pourquoi cat|dog doit être délimité en tant que groupe, ou la limite se lie à une seule branche
Le mode Regex laisse le modèle saisi intact, mais le mot entier le regroupe toujours avant d'ajouter des limites. Pour `cat|dog`, ToolAcre compile la forme conceptuelle `(?:cat|dog)`. Les deux alternatives doivent donc commencer et se terminer aux limites des mots, donc `cat` autonome et `dog` autonome correspondent selon la même règle.
Sans ce groupe, `cat|dog` se diviserait en deux branches : une limite gauche ne contraindrait que `cat`, tandis qu'une limite droite ne contraindrait que `dog`. L'alternance a une priorité inférieure à celle de la séquence environnante. Le regroupement est ce qui applique les deux assertions de limite à l'ensemble du choix au lieu de distribuer une assertion de manière inégale.
Exemple concret : renommer un produit dans un document avec Mot entier activé et inspecter le nombre de remplacements par rapport aux attentes
Collez un passage représentatif contenant `cat`, `dog`, `concatenate`, `dogged` et des signes de ponctuation tels que `cat, dog.` Entrez `cat|dog`, activez Regex et Whole word, puis exécutez Remplacer tout par le nouveau nom du produit. Les deux mots d'animaux autonomes devraient changer ; plus les mots doivent rester exactement tels qu’ils étaient.
Lisez le nombre de remplacements signalé avant d'accepter la modification. Si le document comporte trois références autonomes connues mais que l'outil en signale deux ou douze, sélectionnez Annuler et inspectez les exemples de contextes. ToolAcre compte les correspondances avant d'appeler le remplacement de chaîne standard, le total affiché constitue donc une vérification pratique de la règle de recherche que vous avez réellement compilée.
Là où les limites des mots vous surprennent : les caractères des mots JavaScript sont des lettres ASCII, des chiffres et des traits de soulignement. Les mots accentués et non latins doivent donc être testés.
Ces limites n'implémentent pas de dictionnaire multilingue ni d'algorithme de segmentation de texte Unicode. Étant donné que les lettres accentuées et les écritures non latines ne font pas partie de la catégorie de mots de style ASCII utilisée ici, le mot entier peut renvoyer zéro ou produire des positions de bord surprenantes pour des termes tels que `café`. La ponctuation à l’intérieur d’un terme de recherche peut provoquer la même inadéquation.
Testez la langue et l'orthographe exactes avant une modification groupée, en particulier pour les noms contenant des accents, des apostrophes ou des traits d'union. Une assertion de limite compare uniquement les catégories de caractères adjacentes ; il ne sait pas si la typographie forme un seul mot humain. Si l'exemple échoue, utilisez une expression régulière délibérément conçue pour cet environnement plutôt que de faire confiance à la case à cocher.
Là où les limites des mots JavaScript vous surprennent : les caractères de style ASCII ne sont pas des mots linguistiques
L'outil fournit une option distincte sensible à la casse, contrairement à toute implication selon laquelle la gestion des cas est absente de l'interface. Le supprimer ajoute l’indicateur insensible à la casse de JavaScript. Cependant, l'implémentation utilise uniquement la correspondance globale plus une insensibilité facultative à la casse ; il n'ajoute pas d'indicateurs Unicode, multiligne, point-all, collant ou autres.
Cet article ne transforme pas non plus `` en une limite compatible Unicode et ne résout pas non plus la tokenisation spécifique au langage. Les échappements de propriétés JavaScript ne remplacent pas ici car l'outil ne compile pas de modèles avec l'indicateur Unicode. Pour un travail éditorial multilingue, établissez des cas de test explicites et choisissez un modèle pris en charge par le moteur de navigateur utilisé.
Des options de cas existent dans l'outil ; Les limites de mots compatibles Unicode ne le sont pas
Le mot entier est une règle de composition, pas un deuxième moteur de remplacement. Le mode littéral échappe à la recherche ; le mode regex le préserve ; alors le même groupe de non-capture et deux frontières entourent l'un ou l'autre résultat. Cet ordre protège la ponctuation littérale et fait en sorte que les alternatives regex telles que `cat|dog` se comportent comme une seule expression limitée.
Utilisez l'option lorsque des termes autonomes de style ASCII sont les cibles prévues, puis traitez le nombre de remplacements et le contrôle d'annulation comme des garanties plutôt que comme une décoration. Ouvrez Rechercher et remplacer de ToolAcre, testez l'alternance par rapport à des exemples autonomes et intégrés, et appliquez-la uniquement au document complet une fois que ces exemples se sont comportés comme prévu.