Regex Lookahead Duda [SOLUCIONADO]

El lenguaje de pattern matching o coincidencia de patrones de JavaScript, influido principalmente por Perl, proporciona un medio poderoso y flexible de manipulación de texto. En el esfuerzo de este artículo vamos a desentrañar uno de los conceptos más interesantes y en ocasiones desconcertantes en el uso de expresiones regulares (Regex); el Regex lookahead. Sin duda, este es un tema de gran relevancia, ya sea que esté buscando hacer coincidir patrones complejos en textos o realizar reemplazos no triviales, el lookahead en Regex de JavaScript puede proporcionar una solución eficiente.

Entenderemos la funcionalidad del lookahead en el contexto de las expresiones regulares, y su particular uso en JavaScript. El lookahead positivo nos permite combinar la información de lo que viene después en nuestra coincidencia, sin hacer que esa parte sea consumida.

var re = /gato(?=s)/;
var str = 'Los gatos son felinos';
console.log(str.match(re));

En el ejemplo anterior, el código buscará todas las instancias de ‘gato’ seguidas de ‘s’, pero sólo hará coincidir la palabra ‘gato’. El lookahead permite a su expresión regular tener en cuenta parte de la cadena de texto para sus propósitos de coincidencia mientras excluye ese texto de la coincidencia misma.

Por otro lado, tenemos el lookahead negativo. Este es utilizado cuando queremos negar una posible coincidencia. Si necesitamos encontrar todas las instancias de ‘gato’ que no estén seguidas de ‘s’, podríamos usar un lookahead negativo como se muestra en el siguiente ejemplo.

var re = /gato(?!s)/;
var str = 'Los gatos y el gato son felinos';
console.log(str.match(re));

En el segundo ejemplo, encontramos un solo match con ‘gato’. Como en la primera sentencia, ‘gato’ está seguido de ‘s’, se excluye de la coincidencia debido al lookahead negativo.

Recuerda: el lookahead, ya sea positivo o negativo, no consume caracteres en la cadena de texto, pero sólo afirma (o niega) que estos caracteres existen después de la coincidencia actual, de ahí el nombre ” lookahead” – mirando hacia adelante.

Debes tener presente que JavaScript no soporta lookbehinds (mirar atrás), solo lookahead (mirar hacia adelante). Aunque hay formas de contingencia para simular un comportamiento de lookbehind, éstas pueden resultar un poco engorrosas y no son tan eficientes ni elegantes como un verdadero lookbehind.

Sin duda, el uso de Lookaheads y Lookbehinds, puede aumentar tremendamente la potencia de nuestras expresiones regulares, presentando soluciones elegantes a problemas que de otro modo resultarían engorrosos y complicados de resolver.

Por último, aunque no tenemos un lookbehind, JavaScript está trabajando para proporcionarlo en su próximo versión de ECMAScript. Pero para su uso actual, y desde una perspectiva de eficiencia, el lookahead puede proporcionar una solución eficaz a problemas de coincidencia de patrones que van más allá del ámbito de las operaciones de búsqueda y reemplazo simples.

El dominio de las expresiones regulares, incluyendo el lookahead, no es un asunto trivial. Requiere práctica y experimentación constante. Pero los beneficios son inmensos. Desde comprobar si un email es válido, hasta hacer scraping de un sitio web, las expresiones regulares son una herramienta valiosa para todo desarrollador de JavaScript.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad