13 de diciembre de 2021

Límite de palabra: \b

Un límite de palabra \b es una prueba, al igual que ^ y $.

Cuando el motor regex (módulo de programa que implementa la búsqueda de expresiones regulares) se encuentra con \b, comprueba que la posición en la cadena es un límite de palabra.

Hay tres posiciones diferentes que califican como límites de palabras:

  • Al comienzo de la cadena, si el primer carácter de cadena es un carácter de palabra \w.
  • Entre dos caracteres en la cadena, donde uno es un carácter de palabra \w y el otro no.
  • Al final de la cadena, si el último carácter de la cadena es un carácter de palabra \w.

Por ejemplo, la expresión regular \bJava\b se encontrará en Hello, Java!, donde Java es una palabra independiente, pero no en Hello, JavaScript!.

alert( "Hello, Java!".match(/\bJava\b/) ); // Java
alert( "Hello, JavaScript!".match(/\bJava\b/) ); // null

En la cadena Hello, Java! las flechas que se muestran corresponden a \b, ver imagen:

Entonces, coincide con el patrón \bHello\b, porque:

  1. Al comienzo de la cadena coincide con la primera prueba: \b.
  2. Luego coincide con la palabra Hello.
  3. Luego, la prueba \b vuelve a coincidir, ya que estamos entre o y una coma.

El patrón \bHello\b también coincidiría. Pero no \bHel\b (porque no hay límite de palabras después de l) y tampoco Java!\b (porque el signo de exclamación no es un carácter común \w, entonces no hay límite de palabras después de eso).

alert( "Hello, Java!".match(/\bHello\b/) ); // Hello
alert( "Hello, Java!".match(/\bJava\b/) );  // Java
alert( "Hello, Java!".match(/\bHell\b/) );  // null (sin coincidencia)
alert( "Hello, Java!".match(/\bJava!\b/) ); // null (sin coincidencia)

Podemos usar \b no solo con palabras, sino también con dígitos.

Por ejemplo, el patrón \b\d\d\b busca números independientes de 2 dígitos. En otras palabras, busca números de 2 dígitos que están rodeados por caracteres diferentes de \w, como espacios o signos de puntuación (o texto de inicio/fin).

alert( "1 23 456 78".match(/\b\d\d\b/g) ); // 23,78
alert( "12,34,56".match(/\b\d\d\b/g) ); // 12,34,56
El límite de palabra \b no funciona para alfabetos no latinos

La prueba de límite de palabra \b verifica que debe haber un \w en un lado de la posición y "no \w"- en el otro lado.

Pero \w significa una letra latina a-z (o un dígito o un guión bajo), por lo que la prueba no funciona para otros caracteres, p.ej.: letras cirílicas o jeroglíficos.

Tareas

La hora tiene un formato: horas:minutos. Tanto las horas como los minutos tienen dos dígitos, como 09:00.

Haz una expresión regular para encontrar el tiempo en la cadena: Desayuno a las 09:00 en la habitación 123:456.

P.D.: En esta tarea todavía no hay necesidad de verificar la corrección del tiempo, por lo que 25:99 también puede ser un resultado válido.

P.P.D.: La expresión regular no debe coincidir con 123:456.

La respuesta: \b\d\d:\d\d\b.

alert( "Desayuno a las 09:00 en la habitación 123:456.".match( /\b\d\d:\d\d\b/ ) ); // 09:00
Mapa del Tutorial