Estoy leyendo un libro sobre expresiones regulares y encontré este ejemplo para \b
:
El gato esparció su comida por toda la habitación.
El uso de expresiones regulares - \bcat\b
coincidirá con la palabra cat
pero no la cat
de scattered
.
Para \B
el autor usa el siguiente ejemplo:
Ingrese la identificación de nueve dígitos ya que
aparece en su contraseña codificada por colores.
Usar \B-\B
coincidencias de expresiones regulares -
entre la palabra color - coded
. El uso, \b-\b
por otro lado, coincide con -
in nine-digit
y pass-key
.
¿Cómo es que en el primer ejemplo usamos \b
para separar cat
y en el segundo usamos \B
para separar -
? Usar \b
en el segundo ejemplo hace lo contrario de lo que hizo antes.
Por favor explícame la diferencia.
EDITAR: Además, ¿alguien puede explicar con un nuevo ejemplo?
-
no se considera parte de una palabra. Del mismo modo,!
no es parte de una palabra. Así que nuevamente\b!\b
coincide con "uunet! Iamold", pero no con "Wow! You are". Puede probar estas cosas en regexpal.com .\B matches the empty string not at the beginning or end of a word
\b
es un límite de palabra de ancho cero. Específicamente:Ejemplo:
.\b
coincidec
conabc
\B
es un límite sin palabras de ancho cero. Específicamente:Ejemplo:
\B.\B
coincideb
conabc
Consulte regular-expressions.info para obtener más información sobre expresiones regulares
fuente
string.match()
devuelve solo la primera coincidencia, a menos que agregue la bandera globalg
:"abc def".match(/\b./g)
devuelve['a', ' ', 'd']
Con un ejemplo diferente:
Considere que esta es la cadena y el patrón que se debe buscar es 'gato':
text = "catmania thiscat thiscatmaina";
Ahora definiciones,
'\ b' busca / coincide con el patrón al principio o al final de cada palabra.
'\ B' no encuentra / coincide con el patrón al principio o al final de cada palabra.
Diferentes casos:
Caso 1: Al comienzo de cada palabra
result = text.replace(/\bcat/g, "ct");
Ahora, el resultado es "ctmania thiscat thiscatmaina"
Caso 2: al final de cada palabra
result = text.replace(/cat\b/g, "ct");
Ahora, el resultado es "catmania thisct thiscatmaina"
Caso 3: No al principio
result = text.replace(/\Bcat/g, "ct");
Ahora, el resultado es "catmania thisct thisctmaina"
Caso 4: No al final
result = text.replace(/cat\B/g, "ct");
Ahora, el resultado es "ctmania thiscat thisctmaina"
Caso 5: Ni principio ni fin
result = text.replace(/\Bcat\B/g, "ct");
Ahora, el resultado es "catmania thiscat thisctmaina"
Espero que esto ayude :)
fuente
El metacarácter \ b es un ancla como el símbolo de intercalación y el signo de dólar. Coincide en una posición que se denomina "límite de palabras". Esta coincidencia es de longitud cero.
Hay tres posiciones diferentes que califican como límites de palabras:
\ B es la versión negada de \ b . \ B coincide en todas las posiciones donde \ b no. Efectivamente, \ B coincide en cualquier posición entre dos caracteres de palabra así como en cualquier posición entre dos caracteres que no son de palabra.
Fuente: http://www.regular-expressions.info/wordbo limits.html
fuente
\b
coincide con un límite de palabras.\B
coincide con límites sin palabras, y es equivalente a (¡gracias a @Alan Moore por la corrección!) . Ambos son de ancho cero.[^\b]
(?!\b)
Consulte http://www.regular-expressions.info/wordbo limits.html para obtener más detalles. El sitio es extremadamente útil para muchas preguntas básicas sobre expresiones regulares.
fuente
\B
no es equivalente a[^\b]
. Una clase de caracteres ([...]
o[^...]
) consume exactamente un carácter, mientras que a las afirmaciones de ancho cero les gusta\b
y\B
no consumen nada. Si pones\b
una clase de carácter, toma un significado completamente diferente:[\b]
coincide con un retroceso y[^\b]
coincide con cualquier carácter excepto con un retroceso.\B
es realmente equivalente a(?!\b)
.Tomemos una cadena como:
Nota: El subrayado (_) no se considera un carácter especial en este caso.
/\bX\b/g
Debe comenzar y terminar con un carácter especial o un espacio en blanco/\bX/g
Debe comenzar con un carácter especial o un espacio en blanco/X\b/g
Debe terminar con un carácter especial o un espacio en blanco/\BX\B/g
No debe comenzar ni terminar con un carácter especial o un espacio en blanco
/\BX/g
No debe comenzar con un carácter especial o un espacio en blanco/X\B/g
No debe terminar con un carácter especial o un espacio en blanco/\bX\B/g
Debe comenzar y no terminar con un carácter especial o un espacio en blanco/\BX\b/g
No debe comenzar y debe terminar con un carácter especial o un espacio en blancofuente
Fuente © Copyright RexEgg.com
Límite de palabra: \ b *
El límite de la palabra \ b coincide con las posiciones en las que un lado es un carácter de palabra (generalmente una letra, un dígito o un guión bajo, pero vea a continuación las variaciones entre los motores) y el otro lado no es un carácter de palabra (por ejemplo, puede ser el comienzo de la cadena o un carácter de espacio).
La expresión regular \ bcat \ b, por lo tanto, coincidiría con gato en un gato negro, pero no con catatónico, tomcat o certificado. Eliminando uno de los límites, \ bcat coincidiría con cat en bagre y cat \ b coincidiría con cat en tomcat, pero no al revés. Ambos, por supuesto, coincidirían con el gato por sí solos.
Límite de no-una-palabra: \ B
\ B coincide con todas las posiciones donde \ b no coincide. Por tanto, coincide:
✽ Cuando ninguno de los lados es un carácter de palabra, por ejemplo, en cualquier posición de la cadena $ = (@ -% ++) (incluido el principio y el final de la cadena)
✽ Cuando ambos lados son un carácter de palabra, por ejemplo, entre la H y la i en ¡Hola!
Esto puede no parecer muy útil, pero a veces \ B es justo lo que desea. Por ejemplo,
✽ \ Bcat \ B encontrará cat completamente rodeado de caracteres de palabras, como en el certificado, pero no solo ni al principio o al final de las palabras.
✽ cat \ B encontrará cat tanto en certificado como en bagre, pero ni en tomcat ni por sí solo.
✽ \ Bcat encontrará gato tanto en certificado como en gato, pero ni en bagre ni por sí solo.
✽ \ Bcat | cat \ B encontrará un gato en una situación incrustada, por ejemplo, en un certificado, un bagre o un gato, pero no solo.
fuente
\ b se usa como límite de palabras
Buscar todo "gato" en la palabra anterior
sin \ b
con B
fuente
\B
no es,\b
por ejemplo, negativo\b
pass-key
aquí no hay un límite de palabras al lado,-
por lo que coincide\B
en su primer ejemplo, hay un límite de palabras al lado de gato, por lo que coincide\b
también se aplican reglas similares para otros.
\W
es negativo de\w
\UPPER CASE
es negativo de\LOWER CASE
fuente