Límite de palabra en expresiones regulares de JavaScript (\b)
En las expresiones regulares de JavaScript, el ancla \b se usa para coincidir con límites de palabra entre caracteres de palabra y no-palabra.
Introducción a los límites de palabra
En JavaScript las expresiones regulares usan el ancla \b para coincidir con los límites de palabra. Un límite de palabra es una posición entre un carácter de palabra (definido por la clase de caracteres \w, que incluye [a-zA-Z0-9_]) y un carácter que no es de palabra (cualquier carácter que no sea de palabra). Esto permite hacer coincidir palabras completas con precisión y resulta especialmente útil para tareas como buscar, reemplazar o validar patrones de palabras específicos en texto.
\b es una de las anclas de expresiones regulares. A diferencia de las anclas de inicio y fin de cadena ^ y $, que fijan una coincidencia en los extremos de la entrada, \b la fija en los extremos de una palabra, de modo que un mismo patrón puede coincidir con palabras completas en cualquier punto de una cadena.
Este capítulo explica qué cuenta como límite de palabra, cómo funciona el ancla opuesta \B, la naturaleza de anchura cero de ambas, los patrones habituales para coincidir con palabras completas y las limitaciones que se presentan con texto Unicode.
Uso del ancla \b
El ancla \b es una aserción de anchura cero: coincide con una posición, no con un carácter. La posición debe estar entre un carácter de palabra (uno que \w reconoce: [a-zA-Z0-9_]) y un carácter que no sea de palabra, o entre un carácter de palabra y el inicio o fin absoluto de la cadena. Al ser de anchura cero, \b no consume ningún carácter; solo restringe dónde puede coincidir el resto del patrón.
Hay tres lugares donde se produce un límite de palabra:
- Antes del primer carácter, si ese carácter es un carácter de palabra.
- Después del último carácter, si ese carácter es un carácter de palabra.
- Entre dos caracteres adyacentes donde exactamente uno de ellos es un carácter de palabra.
El ancla complementaria \B coincide con todas las posiciones que no son un límite de palabra.
Para ver dónde caen exactamente los límites, inserta un marcador en cada posición \b:
Explicación: Los cuatro límites son: antes de a, después de c (junto al espacio), antes de d y después de f (fin de cadena). El hueco entre los espacios no tiene límite porque ninguno de los lados es un carácter de palabra.
Ejemplo: coincidir con palabras completas
Explicación:
- La expresión regular
/\bcat\b/coincide con la palabra "cat" como una palabra completa. - En la cadena
'The cat is here.', "cat" es una palabra separada, por lo que la coincidencia estrue. - En la cadena
'The caterpillar is here.', "cat" forma parte de la palabra "caterpillar", por lo que la coincidencia esfalse.
Ejemplo: encontrar palabras completas en un texto
Explicación:
- La expresión regular
/\bcat\b/gencuentra todas las apariciones de "cat" como palabra completa en el texto. - Solo coincide con "cat", no con "scatter", "caterpillar" ni "catfish", porque "cat" no es una palabra independiente en esos contextos.
- El resultado es un array que contiene
["cat"].
Límites de no-palabra (\B)
\B es el opuesto exacto de \b: coincide con cualquier posición que no sea un límite de palabra. Eso significa que tiene éxito en el interior de una palabra (entre dos caracteres de palabra) o entre dos caracteres que no son de palabra, y falla donde \b tendría éxito.
Usa \B cuando quieras que un patrón coincida solo cuando está incrustado dentro de una palabra más grande.
Explicación:
/\Boo\B/gexige un no-límite a ambos lados deoo.- En
'noon', elootienenen ambos lados, por lo que ambas aserciones\Bse cumplen — hay coincidencia. - En
'zoo', eloose encuentra al final de la palabra, por lo que hay un límite de palabra real y\Bfalla. Solo se devuelve eloode'noon'.
Una forma práctica de recordar la relación: en cada posición, exactamente uno de \b y \B coincide.
Aplicaciones prácticas
Validación de campos de entrada
Los límites de palabra son útiles para validar campos de entrada donde se requieren coincidencias exactas de palabras.
Explicación:
- La expresión regular
/^\w+$/garantiza que la entrada sea una sola palabra sin espacios. ^afirma el inicio de la cadena y$afirma el final. Como\wsolo reconoce caracteres de palabra,^y$imponen límites de palabra de forma implícita, lo que hace redundante el uso de\baquí.\w+coincide con uno o más caracteres de palabra (incluyendo letras, dígitos y guiones bajos).'user123'coincide porque es una sola palabra sin espacios.'user 123'no coincide porque contiene un espacio que interrumpe la secuencia de caracteres de palabra.- Ten en cuenta que
\wincluye guiones bajos, lo que puede afectar la lógica de validación si pretendes excluirlos.
Extracción de palabras de una oración
Puedes extraer palabras específicas de una oración utilizando límites de palabra.
Explicación:
- El patrón
/\btest\w*\b/gicoincide con cualquier palabra que comience con "test". - El indicador
ggarantiza que se devuelvan todas las coincidencias en la cadena. - El indicador
igarantiza que la coincidencia sea insensible a mayúsculas y minúsculas, por lo que coincide tanto con "test" como con "Testing". - El resultado es
["test", "Testing"], ya que ambas palabras comienzan con "test" y van seguidas de cero o más caracteres de palabra.
Combinación de límites de palabra con otros patrones
Los límites de palabra se pueden combinar con otros patrones de expresiones regulares para obtener coincidencias más complejas.
Ejemplo: encontrar palabras con prefijo
Explicación:
- La expresión regular
/\bpre\w*\b/gcoincide con las palabras que comienzan con el prefijo "pre". \bpreafirma un límite de palabra seguido de "pre".\w*coincide con cero o más caracteres de palabra.\bafirma un límite de palabra al final.- El resultado es un array que contiene
["preheat", "prefix", "prepare", "pressure"].
Ejemplo: encontrar palabras con sufijo específico
Explicación:
- La expresión regular
/\w+ing\b/gcoincide con las palabras que terminan en "ing". \w+coincide con uno o más caracteres de palabra.ing\bcoincide con "ing" seguido de un límite de palabra.- El resultado es un array que contiene
["running", "walking", "talking", "thinking"].
Cuando necesites coincidir con palabras completas o asegurarte de que las palabras no formen parte de cadenas más largas, usa el ancla \b para definir con precisión los límites de palabra
Usa \b para coincidencias de palabras precisas
Explicación:
- La expresión regular
/\bdog\b/gcoincide con la palabra "dog" como una palabra completa. - No coincide con "dogs" porque "dog" no es una palabra independiente en ese contexto.
- El resultado es un array que contiene
["dog"].
Ejemplo: coincidir con números completos
Como los dígitos son caracteres de palabra, \b también funciona con números; resulta útil para extraer enteros de texto mixto sin dividir por el punto decimal.
Explicación:
/\b\d+\b/gcoincide con secuencias de dígitos que aparecen solas entre caracteres no numéricos.3.14se divide en"3"y"14"porque el.es un carácter no-palabra, de modo que hay un límite de palabra a cada lado de él.
Limitaciones con Unicode
El ancla \b se define únicamente en términos del conjunto ASCII \w ([a-zA-Z0-9_]). Las letras con diacríticos o los caracteres de escrituras no latinas se tratan como caracteres no-palabra, por lo que aparece un límite en lugares donde quizás no lo esperas.
Explicación:
éno está en\w, por lo que el motor detecta un límite de palabra entrecafyé.- El
\bfinal después deéespera queésea un carácter de palabra — no lo es — por lo que toda la aserción falla aunque el texto contenga claramente la palabra "café".
JavaScript no proporciona una versión de \b compatible con Unicode (los indicadores u y v no cambian su definición). Si necesitas coincidir con palabras acentuadas o no latinas como palabras completas, construye tus propios límites a partir de una clase de caracteres explícita, por ejemplo:
Explicación:
\p{L}(habilitado por el indicadoru) coincide con cualquier letra Unicode.- El lookbehind
(?<![\p{L}])y el lookahead(?![\p{L}])recrean un límite consciente de las letras, de modo quecafécoincide perocafésno. - Esta es la solución estándar cuando el
\bde ASCII es demasiado restrictivo para tu alfabeto.
Conclusión
El ancla \b en las expresiones regulares de JavaScript es una herramienta poderosa para coincidir con límites de palabra. Al usar esta ancla, puedes crear patrones precisos y eficaces para buscar, reemplazar y validar palabras dentro de un texto. Ya sea que trabajes en funcionalidad de búsqueda, validación de datos o procesamiento de texto, comprender y utilizar los límites de palabra puede mejorar significativamente tus capacidades con las expresiones regulares.