¿Existe una forma sencilla de ignorar el espacio en blanco en una cadena de destino cuando se buscan coincidencias con un patrón de expresión regular? Por ejemplo, si mi búsqueda es para "gatos", querría que "c ats" o "ca ts" coincidieran. No puedo eliminar el espacio en blanco de antemano porque necesito encontrar el índice de inicio y finalización de la coincidencia (incluido cualquier espacio en blanco) para resaltar esa coincidencia y cualquier espacio en blanco debe estar allí para fines de formato.
regex
whitespace
Steven
fuente
fuente
^([a-z]\s*)+$
Abordar el comentario de Steven a la respuesta de Sam Dufel
Esto debería funcionar:
Consulte esta página para conocer todas las diferentes variaciones de 'gatos' que esto coincide.
También puede resolver esto usando condicionales , pero no son compatibles con la versión javascript de regex.
fuente
new RegExp('cats'.split('').join('(?:\n\s*)?'))
Si bien la respuesta aceptada es técnicamente correcta, un enfoque más práctico, si es posible, es simplemente eliminar los espacios en blanco tanto de la expresión regular como de la cadena de búsqueda.
Si desea buscar "mis gatos", en lugar de:
Solo haz:
Advertencia: No puede automatizar esto en la expresión regular simplemente reemplazando todos los espacios con cadenas vacías porque pueden ocurrir en una negación o invalidar su expresión regular.
fuente
Puede poner
\s*
entre todos los caracteres de su cadena de búsqueda, por lo que si estuviera buscando un gato, usaríac\s*a\s*t\s*s\s*s
Es largo pero, por supuesto, podrías construir la cadena de forma dinámica.
Puedes verlo funcionando aquí: http://www.rubular.com/r/zzWwvppSpE
fuente
Si solo desea permitir espacios, entonces
Deberías hacerlo. Para permitir también pestañas, use
Elimine las
\b
anclas si también desea buscarcats
dentro de palabras comobobcats
ocatsup
.fuente
Este enfoque se puede usar para automatizar esto (la siguiente solución ejemplar está en Python, aunque obviamente se puede portar a cualquier idioma):
puede quitar el espacio en blanco de antemano Y guardar las posiciones de los caracteres que no son espacios en blanco para poder usarlos más adelante para averiguar las posiciones de los límites de la cadena coincidente en la cadena original como se muestra a continuación:
Si desea ir más allá, puede construir el objeto de coincidencia y devolverlo en su lugar, por lo que el uso de este ayudante será más útil.
Y el rendimiento de esta función también se puede optimizar, por supuesto, este ejemplo es solo para mostrar el camino hacia una solución.
fuente