Español

Texto y herramientas cotidianas · Text Toolkit

Cómo funciona la búsqueda de palabras completas: límites de palabras y el problema del gato|perro

· Cómo funciona

expresión regular buscar y reemplazar edición de texto

Las palabras gato y perro que atraviesan límites mientras se concatenan permanecen sin cambios
Ilustración de vector original de ToolAcre

Explica qué es un límite de palabra en expresiones regulares de JavaScript, por qué 'gato' no debe coincidir dentro de 'concatenar' y por qué una alternancia como gato|perro debe agruparse antes de agregar límites.

El cambio de nombre que cambió 'concatenar': por qué buscar y reemplazar una palabra corta daña las palabras más largas

El cambio de nombre de un producto parece inofensivo hasta que aparece un nombre corto dentro de palabras no relacionadas. Reemplazar cada aparición de `cat` con `lynx` cambia `concatenate` a `conlynxenate`, aunque ningún editor tuvo la intención de cambiar el nombre de parte de ese verbo. Un recuento de coincidencias por sí solo no puede proteger el documento cuando la regla de búsqueda es demasiado amplia.

La coincidencia de palabras completas reduce la regla antes de que se produzca cualquier reemplazo. En ToolAcre, habilitar Palabra completa hace que `cat` independiente sea elegible y deja intactas las mismas letras dentro de `concatenate`. La distinción es estructural más que basada en diccionario: el motor de expresiones regulares verifica los caracteres inmediatamente al lado de cada posible coincidencia.

Qué significa \b: la posición de ancho cero entre un carácter de palabra y un carácter que no es de palabra

En una expresión regular de JavaScript, `` marca un límite de palabra de ancho cero. No consume letras, espacios ni puntuación. En cambio, tiene éxito en una posición en la que un lado es un carácter de palabra y el otro no, incluido el inicio o el final del texto cuando el carácter adyacente califica como un carácter de palabra.

La categoría `w` de JavaScript proporciona los caracteres de palabras relevantes para esta implementación: letras ASCII, dígitos y guiones bajos. Por lo tanto, `cat` coincide con `cat` al lado de espacios, comas o extremos de línea, pero no con el segmento `cat` dentro de `concatenate`, porque ambos lados de ese segmento continúan a través de caracteres de palabra y no existe ningún límite allí.

Palabra completa en modo literal: el texto de búsqueda se escapa primero y luego se envuelve entre límites

Con Regex desactivado, ToolAcre primero escapa de cada metacarácter de expresión regular en el texto de búsqueda. Un punto sigue siendo un punto literal, los paréntesis siguen siendo paréntesis literales y un signo más sigue siendo un signo más. Solo después de ese paso de escape, la palabra completa ajusta la fuente resultante, por lo que la puntuación del usuario no puede convertirse silenciosamente en sintaxis de expresiones regulares.

El contenedor es `(?:… )` sin el espacio mostrado: el `(?:…)` interno es un grupo que no captura. Para un literal simple como `cat`, el efecto es equivalente a `cat`. La agrupación sigue siendo importante porque una ruta de compilación debe manejar de forma segura términos simples y alternativas más complicadas sin cambiar la numeración del grupo de captura.

Palabra completa en modo regex: por qué gato|perro debe estar delimitado como un grupo o el límite se vincula solo a una rama

El modo Regex deja intacto el patrón ingresado, pero la palabra completa aún lo agrupa antes de agregar límites. Para `cat|dog`, ToolAcre compila el formulario conceptual `(?:cat|dog)`. Por lo tanto, ambas alternativas deben comenzar y terminar en los límites de las palabras, por lo que el `cat` independiente y el `dog` independiente coinciden bajo la misma regla.

Sin ese grupo, `cat|dog` se dividiría en dos ramas: un límite izquierdo restringiría solo `cat`, mientras que un límite derecho restringiría solo `dog`. La alternancia tiene menor prioridad que la secuencia circundante. La agrupación es lo que aplica ambas afirmaciones de límites a toda la elección en lugar de distribuir una afirmación de manera desigual.

Ejemplo resuelto: cambiar el nombre de un producto en un documento con la palabra completa activada e inspeccionar el recuento de reemplazos según las expectativas

Pegue un pasaje representativo que contenga `cat`, `dog`, `concatenate`, `dogged` y puntuación como `cat, dog.` Ingrese `cat|dog`, active Regex y Palabra completa y ejecute Reemplazar todo con el nuevo nombre del producto. Las dos palabras animales independientes deberían cambiar; las palabras más largas deben permanecer exactamente como estaban.

Lea el recuento de reemplazos informado antes de aceptar la edición. Si el documento tiene tres referencias independientes conocidas pero la herramienta informa dos o doce, seleccione Deshacer e inspeccione los contextos de muestra. ToolAcre cuenta las coincidencias antes de llamar al reemplazo de cadena estándar, por lo que el total mostrado es una verificación práctica de la regla de búsqueda que realmente compiló.

Donde los límites de las palabras te sorprenden: los caracteres de las palabras de JavaScript son letras ASCII, dígitos y guiones bajos, por lo que es necesario probar las palabras acentuadas y no latinas.

Estos límites no implementan un diccionario multilingüe ni un algoritmo de segmentación de texto Unicode. Debido a que las letras acentuadas y las escrituras no latinas quedan fuera de la categoría de palabras de estilo ASCII que se utiliza aquí, Palabra completa puede devolver cero o producir posiciones de borde sorprendentes para términos como `café`. La puntuación dentro de un término de búsqueda puede provocar la misma discrepancia.

Pruebe el idioma y la ortografía exactos antes de una edición masiva, especialmente para nombres que contienen acentos, apóstrofes o guiones. Una afirmación de límites sólo compara categorías de caracteres adyacentes; no sabe si la tipografía forma una palabra humana. Si la muestra falla, utilice una expresión regular diseñada deliberadamente para ese entorno en lugar de confiar en la casilla de verificación.

Donde te sorprenden los límites de las palabras de JavaScript: los caracteres de las palabras de estilo ASCII no son palabras lingüísticas

La herramienta proporciona una opción separada que distingue entre mayúsculas y minúsculas, contrariamente a cualquier implicación de que el manejo de casos está ausente en la interfaz. Al borrarlo se agrega el indicador que no distingue entre mayúsculas y minúsculas de JavaScript. Sin embargo, la implementación utiliza sólo la coincidencia global más la insensibilidad entre mayúsculas y minúsculas opcional; no agrega banderas Unicode, multilínea, dot-all, adhesivas ni de otro tipo.

Este artículo tampoco convierte `` en un límite compatible con Unicode ni resuelve la tokenización específica del idioma. Los escapes de propiedades de JavaScript no son un sustituto aquí porque la herramienta no compila patrones con la bandera Unicode. Para trabajos editoriales multilingües, establezca casos de prueba explícitos y elija un patrón compatible con el motor del navegador en uso.

Existen opciones de caso en la herramienta; Los límites de palabras compatibles con Unicode no

La palabra completa es una regla de composición, no un segundo motor de reemplazo. El modo literal escapa a la búsqueda; el modo regex lo conserva; entonces el mismo grupo no capturador y dos límites rodean cada resultado. Ese orden protege la puntuación literal y hace que las alternativas de expresiones regulares como `cat|dog` se comporten como una expresión limitada.

Utilice la opción cuando los términos de estilo ASCII independientes sean los objetivos previstos, luego trate el recuento de reemplazo y el control Deshacer como salvaguardas en lugar de decoración. Abra Buscar y reemplazar de ToolAcre, pruebe la alternancia con ejemplos independientes e integrados, y solo aplíquela al documento completo después de que esos ejemplos se comporten como se esperaba.