La mayoría de las implementaciones de expresiones regulares admiten dos funciones útiles:
- Búsqueda hacia adelante (lookahead)
- Búsqueda hacia atrás (lookbehind)
En esta lección veremos para qué se utilizan.
Tenemos la siguiente expresión regular que encuentra dos subcadenas:
/LudovicXVI/
LudovicXV, LudovicXVI, LudovicXVIII, LudovicLXVII, LudovicXXL
Supongamos que no queremos incluir en los resultados de la búsqueda la parte de la subcadena con los números romanos XVI. Para hacer esto, envolvemos los números en la siguiente construcción:
/Ludovic(?=XVI)/
LudovicXV, LudovicXVI, LudovicXVIII, LudovicLXVII, LudovicXXL
Como podemos ver, las condiciones de coincidencia establecidas por la expresión original no han cambiado. Se han encontrado las mismas subcadenas que en el ejemplo anterior.
Sin embargo, los caracteres XVI en las subcadenas coincidentes no se han incluido en el resultado final de la búsqueda. Este comportamiento se llama búsqueda hacia adelante positiva o búsqueda anticipada positiva.
La lógica de la búsqueda hacia adelante positiva se puede describir de la siguiente manera. La expresión regular a(?=b) encuentra coincidencias de a seguidas de b, sin incluir b en la coincidencia.
La búsqueda hacia adelante también puede ser negativa. En este caso, buscará coincidencias en las subcadenas donde la parte especificada entre paréntesis no esté presente. En nuestro caso, sigue siendo XVI. Para convertir la búsqueda hacia adelante positiva en negativa, reemplazamos el símbolo = por !.
Ahora hemos encontrado otras tres subcadenas:
/Ludovic(?!XVI)/
LudovicXV, LudovicXVI, LudovicXVIII, LudovicLXVII, LudovicXXL
Además de la búsqueda hacia adelante, también existe la búsqueda hacia atrás o búsqueda retrospectiva. Funciona de manera similar, pero busca coincidencias de caracteres que se encuentran después de la parte agrupada entre paréntesis de la expresión regular, que no se incluirá en la coincidencia.
En otras palabras, en la búsqueda hacia atrás positiva, la expresión regular (?<=b)a encuentra coincidencias de a precedidas por b, sin incluir b en la coincidencia.
Para la búsqueda hacia atrás positiva, se utiliza el signo <. En este ejemplo, encontramos coincidencias de las subcadenas Two que están precedidas por One:
/(?<=One )Two/
One Two, Three Two
Para cambiar la búsqueda hacia atrás positiva a negativa, cambiamos = por !:
/(?<!One )Two/
One Two, Three Two
Para acceder completo a curso necesitas un plan básico
El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.