From 99a9d12dd7aaac66b4dce51afced072ce3863d76 Mon Sep 17 00:00:00 2001 From: Jesus Ferney Salazar <68440053+MrC0D@users.noreply.github.com> Date: Mon, 21 Sep 2020 17:08:35 -0500 Subject: [PATCH 01/11] Update article.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Traducción casi finalizada, faltan pulir detalles en lo referente al uso de términos y la gramática, estoy atento a consejos. --- .../14-regexp-lookahead-lookbehind/article.md | 140 ++++++++---------- 1 file changed, 61 insertions(+), 79 deletions(-) diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index 48c82da14..41aac98c9 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -1,130 +1,112 @@ -# Lookahead and lookbehind +# mirar adelante y mirar atras -Sometimes we need to find only those matches for a pattern that are followed or preceeded by another pattern. +A veces necesitamos buscar solo aquella coincidencia en un patron que es precedida o antecedida por otro patron. -There's a special syntax for that, called "lookahead" and "lookbehind", together referred to as "lookaround". - -For the start, let's find the price from the string like `subject:1 turkey costs 30€`. That is: a number, followed by `subject:€` sign. - -## Lookahead - -The syntax is: `pattern:X(?=Y)`, it means "look for `pattern:X`, but match only if followed by `pattern:Y`". There may be any pattern instead of `pattern:X` and `pattern:Y`. - -For an integer number followed by `subject:€`, the regexp will be `pattern:\d+(?=€)`: +Existe una sintaxis especial para eso, llamada "mirar adelante" y "mirar atras" (del ingles: _"lookahead" and "lookbehind"_ ) ,juntas conocidas como "mirar alrededor" +para empezar, busquemos el precio de la cadena siguente `subject:1 pavo cuesta 30€`. eso es: un numero, seguido de `subject:€` signo +## mirar adelante +La sintaxis es: `pattern:X(?=Y)`. esto significa "mirar por `pattern:X`, pero encontrar una coincidencia solo si es seguido por `pattern:Y`". Deben haber algun patron en lugar de `pattern:X` and `pattern:Y`. +Para un numero entero seguido de `subject:€`, la expresion regular sera `pattern:\d+(?=€)`: ```js run -let str = "1 turkey costs 30€"; +let str = "1 pavo cuesta 30€"; -alert( str.match(/\d+(?=€)/) ); // 30, the number 1 is ignored, as it's not followed by € +alert( str.match(/\d+(?=€)/) ); // 30, el numero 1 es ignorad0, por que no tiene al lado a € ``` -Please note: the lookahead is merely a test, the contents of the parentheses `pattern:(?=...)` is not included in the result `match:30`. - -When we look for `pattern:X(?=Y)`, the regular expression engine finds `pattern:X` and then checks if there's `pattern:Y` immediately after it. If it's not so, then the potential match is skipped, and the search continues. +por favor nota: el mirar adelante es solamente una prueba,lo contenido en los parentesis `pattern:(?=...)` no es incluido en el resultado `match:30`. +Cuando buscamos por `pattern:X(?=Y)`, el buscador de expresion regular encuentra `pattern:X` y luego verifica si existe algun `pattern:Y` inmediatamente despues de el.Si no se cumple, entonces la posible coincidencia es omitida, y la busqueda continua. More complex tests are possible, e.g. `pattern:X(?=Y)(?=Z)` means: - -1. Find `pattern:X`. -2. Check if `pattern:Y` is immediately after `pattern:X` (skip if isn't). -3. Check if `pattern:Z` is also immediately after `pattern:X` (skip if isn't). -4. If both tests passed, then the `pattern:X` is a match, otherwise continue searching. - -In other words, such pattern means that we're looking for `pattern:X` followed by `pattern:Y` and `pattern:Z` at the same time. - -That's only possible if patterns `pattern:Y` and `pattern:Z` aren't mutually exclusive. - -For example, `pattern:\d+(?=\s)(?=.*30)` looks for `pattern:\d+` only if it's followed by a space, and there's `30` somewhere after it: - +Pruebas mas complejas son posibles, ejemplo.`pattern:X(?=Y)(?=Z)` significa: +1. encuentra `pattern:X`. +2. Verifica si `pattern:Y` es inmediatamente despues de `pattern:X` (omitir si no es). +3. Verifica si `pattern:Z` es también inmediatamente después de `pattern:X` (omitir si no es). +4. Si ambos casos se cumplen, entonces el `pattern:X` es una coincidencia, de lo contrario, continúe buscando. + +En otras palabras, dicho patron significa que estamos buscando por `pattern:X` seguido de `pattern:Y` y `pattern:Z` al mismo tiempo. +Eso solo es posible si los patrones `pattern:Y` y `pattern:Z` no son mutuamente exclusivos. +Por ejemplo, `pattern:\d+(?=\s)(?=.*30)` busca por `pattern:\d+` solo si es seguido por un espacio, y si hay `30` en algun lugar despues de eso: ```js run -let str = "1 turkey costs 30€"; +let str = "1 pavo cuesta 30€"; alert( str.match(/\d+(?=\s)(?=.*30)/) ); // 1 ``` -In our string that exactly matches the number `1`. - -## Negative lookahead +En nuestra cadena eso coincide exactamente con el numero `1`. +## Mirada hacia delante negativa -Let's say that we want a quantity instead, not a price from the same string. That's a number `pattern:\d+`, NOT followed by `subject:€`. - -For that, a negative lookahead can be applied. - -The syntax is: `pattern:X(?!Y)`, it means "search `pattern:X`, but only if not followed by `pattern:Y`". +Digamos que queremos una cantidad, no un precio de la misma cadena.Eso es el numero `pattern:\d+`, NO seguido por `subject:€`. +Por eso, una mirada hacia delante negativa puede ser aplicada. +La sintaxis es: `pattern:X(?!Y)`, la cual significa "busca `pattern:X`, pero solo si es seguido por `pattern:Y`". ```js run -let str = "2 turkeys cost 60€"; +let str = "2 pavos cuestan 60€"; -alert( str.match(/\d+(?!€)/) ); // 2 (the price is skipped) +alert( str.match(/\d+(?!€)/) ); // 2 (el precio es omitido) ``` -## Lookbehind - -Lookahead allows to add a condition for "what follows". +## Mirar atras -Lookbehind is similar, but it looks behind. That is, it allows to match a pattern only if there's something before it. - -The syntax is: -- Positive lookbehind: `pattern:(?<=Y)X`, matches `pattern:X`, but only if there's `pattern:Y` before it. -- Negative lookbehind: `pattern:(? Date: Tue, 16 Feb 2021 15:39:18 -0300 Subject: [PATCH 02/11] Update 9-regular-expressions/14-regexp-lookahead-lookbehind/article.md Co-authored-by: Valentiina VP <34555644+vplentinax@users.noreply.github.com> --- 9-regular-expressions/14-regexp-lookahead-lookbehind/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index 41aac98c9..5be641f98 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -1,6 +1,6 @@ # mirar adelante y mirar atras -A veces necesitamos buscar solo aquella coincidencia en un patron que es precedida o antecedida por otro patron. +A veces necesitamos buscar solo aquella coincidencia en un patrón que es precedida o antecedida por otro patrón. Existe una sintaxis especial para eso, llamada "mirar adelante" y "mirar atras" (del ingles: _"lookahead" and "lookbehind"_ ) ,juntas conocidas como "mirar alrededor" para empezar, busquemos el precio de la cadena siguente `subject:1 pavo cuesta 30€`. eso es: un numero, seguido de `subject:€` signo From 618da2dcc9f4e82d1638380be8d3cee7a4d8549f Mon Sep 17 00:00:00 2001 From: joaquinelio Date: Tue, 16 Feb 2021 15:40:34 -0300 Subject: [PATCH 03/11] Update 9-regular-expressions/14-regexp-lookahead-lookbehind/article.md Co-authored-by: Valentiina VP <34555644+vplentinax@users.noreply.github.com> --- 9-regular-expressions/14-regexp-lookahead-lookbehind/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index 5be641f98..d5d806f6a 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -3,7 +3,7 @@ A veces necesitamos buscar solo aquella coincidencia en un patrón que es precedida o antecedida por otro patrón. Existe una sintaxis especial para eso, llamada "mirar adelante" y "mirar atras" (del ingles: _"lookahead" and "lookbehind"_ ) ,juntas conocidas como "mirar alrededor" -para empezar, busquemos el precio de la cadena siguente `subject:1 pavo cuesta 30€`. eso es: un numero, seguido de `subject:€` signo +Para empezar, busquemos el precio de la cadena siguiente `subject:1 pavo cuesta 30€`. Eso es: un número, seguido por el signo `subject:€`. ## mirar adelante La sintaxis es: `pattern:X(?=Y)`. esto significa "mirar por `pattern:X`, pero encontrar una coincidencia solo si es seguido por `pattern:Y`". Deben haber algun patron en lugar de `pattern:X` and `pattern:Y`. From 31b6fb8080dccc9ba22dec235fc668799a23cc1d Mon Sep 17 00:00:00 2001 From: joaquinelio Date: Tue, 16 Feb 2021 15:41:16 -0300 Subject: [PATCH 04/11] Update 9-regular-expressions/14-regexp-lookahead-lookbehind/article.md Co-authored-by: Valentiina VP <34555644+vplentinax@users.noreply.github.com> --- 9-regular-expressions/14-regexp-lookahead-lookbehind/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index d5d806f6a..b2d84ea89 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -104,7 +104,7 @@ Recuerda,`str.match` (sin el indicador `pattern:g`) y `str.matchAll` (siempre) r Pero generalmente mirar alrededor es mas conveniente. tipos de mirar alrededor: -| Patron | tipo | coincidencias | +| Patrón | Tipo | Coincidencias | |--------------------|------------------|---------| | `X(?=Y)` | Mirar adelante positivo | `pattern:X` si es seguido por `pattern:Y` | | `X(?!Y)` | Mirar adelante negativo | `pattern:X` si no es seguido por `pattern:Y` | From 10718dd12ae9079adfe8b68ebbc56955cf5b0d10 Mon Sep 17 00:00:00 2001 From: joaquinelio Date: Tue, 16 Feb 2021 15:41:51 -0300 Subject: [PATCH 05/11] Update 9-regular-expressions/14-regexp-lookahead-lookbehind/article.md Co-authored-by: Valentiina VP <34555644+vplentinax@users.noreply.github.com> --- 9-regular-expressions/14-regexp-lookahead-lookbehind/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index b2d84ea89..c3ebf9af7 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -108,5 +108,5 @@ tipos de mirar alrededor: |--------------------|------------------|---------| | `X(?=Y)` | Mirar adelante positivo | `pattern:X` si es seguido por `pattern:Y` | | `X(?!Y)` | Mirar adelante negativo | `pattern:X` si no es seguido por `pattern:Y` | -| `(?<=Y)X` | Mirar atras positivo | `pattern:X` si es despues de `pattern:Y` | +| `(?<=Y)X` | Mirar hacia atrás positivo | `pattern:X` si es después de `pattern:Y` | | `(? Date: Tue, 16 Feb 2021 16:18:40 -0300 Subject: [PATCH 06/11] Apply suggestions from code review Co-authored-by: Valentiina VP <34555644+vplentinax@users.noreply.github.com> --- .../14-regexp-lookahead-lookbehind/article.md | 80 +++++++++---------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index c3ebf9af7..ec154bf90 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -1,44 +1,43 @@ -# mirar adelante y mirar atras +# Mirar hacia delante (lookahead) y mirar hacia atrás (lookbehind) A veces necesitamos buscar solo aquella coincidencia en un patrón que es precedida o antecedida por otro patrón. -Existe una sintaxis especial para eso, llamada "mirar adelante" y "mirar atras" (del ingles: _"lookahead" and "lookbehind"_ ) ,juntas conocidas como "mirar alrededor" +Existe una sintaxis especial para eso llamada "mirar hacia delante" y "mirar hacia atrás" (del ingles: "lookahead" y "lookbehind" ) , juntas son conocidas como "mirar alrededor" ("lookaround"). Para empezar, busquemos el precio de la cadena siguiente `subject:1 pavo cuesta 30€`. Eso es: un número, seguido por el signo `subject:€`. -## mirar adelante +## Mirar hacia delante -La sintaxis es: `pattern:X(?=Y)`. esto significa "mirar por `pattern:X`, pero encontrar una coincidencia solo si es seguido por `pattern:Y`". Deben haber algun patron en lugar de `pattern:X` and `pattern:Y`. -Para un numero entero seguido de `subject:€`, la expresion regular sera `pattern:\d+(?=€)`: +La sintaxis es: `pattern:X(?=Y)`. Esto significa "buscar `pattern:X`, pero encontrar una coincidencia solo si es seguido por `pattern:Y`". Debe haber algún patrón en lugar de `pattern:X` y `pattern:Y`. +Para un número entero seguido de `subject:€`, la expresión regular será `pattern:\d+(?=€)`: ```js run let str = "1 pavo cuesta 30€"; -alert( str.match(/\d+(?=€)/) ); // 30, el numero 1 es ignorad0, por que no tiene al lado a € +alert( str.match(/\d+(?=€)/) ); // 30, el número 1 es ignorado, porque no está seguido de € ``` -por favor nota: el mirar adelante es solamente una prueba,lo contenido en los parentesis `pattern:(?=...)` no es incluido en el resultado `match:30`. -Cuando buscamos por `pattern:X(?=Y)`, el buscador de expresion regular encuentra `pattern:X` y luego verifica si existe algun `pattern:Y` inmediatamente despues de el.Si no se cumple, entonces la posible coincidencia es omitida, y la busqueda continua. +Por favor tenga en cuenta: "mirar hacia delante" es solamente una prueba, lo contenido en los paréntesis `pattern:(?=...)` no es incluido en el resultado `match:30`. +Cuando buscamos por `pattern:X(?=Y)`, el buscador de expresión regular encuentra `pattern:X` y luego verifica si existe algún `pattern:Y` inmediatamente después de él. Si no se cumple, entonces la posible coincidencia es omitida, y la búsqueda continua. -More complex tests are possible, e.g. `pattern:X(?=Y)(?=Z)` means: -Pruebas mas complejas son posibles, ejemplo.`pattern:X(?=Y)(?=Z)` significa: -1. encuentra `pattern:X`. -2. Verifica si `pattern:Y` es inmediatamente despues de `pattern:X` (omitir si no es). -3. Verifica si `pattern:Z` es también inmediatamente después de `pattern:X` (omitir si no es). +Es posible realizar pruebas más complejas, e.j. `pattern:X(?=Y)(?=Z)` significa: +1. Encuentra `pattern:X`. +2. Verifica si `pattern:Y` está inmediatamente después de `pattern:X` (omitir si no es así). +3. Verifica si `pattern:Z` está también inmediatamente después de `pattern:X` (omitir si no es así). 4. Si ambos casos se cumplen, entonces el `pattern:X` es una coincidencia, de lo contrario, continúe buscando. -En otras palabras, dicho patron significa que estamos buscando por `pattern:X` seguido de `pattern:Y` y `pattern:Z` al mismo tiempo. +En otras palabras, dicho patrón significa que estamos buscando por `pattern:X` seguido de `pattern:Y` y `pattern:Z` al mismo tiempo. Eso solo es posible si los patrones `pattern:Y` y `pattern:Z` no son mutuamente exclusivos. -Por ejemplo, `pattern:\d+(?=\s)(?=.*30)` busca por `pattern:\d+` solo si es seguido por un espacio, y si hay `30` en algun lugar despues de eso: +Por ejemplo, `pattern:\d+(?=\s)(?=.*30)` busca por `pattern:\d+` solo si es seguido por un espacio, y si hay `30` en algún lugar después de eso: ```js run let str = "1 pavo cuesta 30€"; alert( str.match(/\d+(?=\s)(?=.*30)/) ); // 1 ``` -En nuestra cadena eso coincide exactamente con el numero `1`. +En nuestra cadena eso coincide exactamente con el número `1`. ## Mirada hacia delante negativa -Digamos que queremos una cantidad, no un precio de la misma cadena.Eso es el numero `pattern:\d+`, NO seguido por `subject:€`. -Por eso, una mirada hacia delante negativa puede ser aplicada. -La sintaxis es: `pattern:X(?!Y)`, la cual significa "busca `pattern:X`, pero solo si es seguido por `pattern:Y`". +Digamos que queremos una cantidad, no un precio de la misma cadena. Eso es el número `pattern:\d+`, NO seguido por `subject:€`. +Por eso se puede aplicar una "mirada hacia delante negativa" ("negative lookahead"). +La sintaxis es: `pattern:X(?!Y)`, que significa "busca `pattern:X`, pero solo si no es seguido por `pattern:Y`". ```js run let str = "2 pavos cuestan 60€"; @@ -48,22 +47,21 @@ alert( str.match(/\d+(?!€)/) ); // 2 (el precio es omitido) ## Mirar atras -Mirar adelante permite agregar a una condicion para "que sigue". -Mirar atras es similar, pero mira detras. Eso es, permite coincidir un patron solo si hay algo antes de el. +Mirar hacia delante permite agregar a una condicion para "lo que sigue". +Mirar hacia atrás es similar. Es decir, permite coincidir un patrón solo si hay algo antes de el. La sintaxis es: -- Mirar atras positivo: `pattern:(?<=Y)X`, coincide `pattern:X`, pero solo si hay `pattern:Y` antes de el. -- Mirar atras negativo: `pattern:(? Date: Thu, 18 Feb 2021 15:44:59 -0300 Subject: [PATCH 07/11] enajenado --- .../14-regexp-lookahead-lookbehind/article.md | 100 +++++++++++------- 1 file changed, 60 insertions(+), 40 deletions(-) diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index 7804f26ea..3bb2140ae 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -1,42 +1,54 @@ -# Mirar hacia delante (lookahead) y mirar hacia atrás (lookbehind) +# Ver delante (lookahead) y ver detrás (lookbehind) -A veces necesitamos buscar solo aquella coincidencia en un patrón que es precedida o antecedida por otro patrón. +A veces necesitamos buscar únicamente aquellas coincidencias donde un patrón sea precedido o seguido por otro patrón. + +Existe una sintaxis especial para eso llamada "ver delante" y "ver detrás" (del ingles: "lookahead" y "lookbehind"), juntas son conocidas como "ver alrededor" ("lookaround"). -Existe una sintaxis especial para eso llamada "mirar hacia delante" y "mirar hacia atrás" (del ingles: "lookahead" y "lookbehind" ) , juntas son conocidas como "mirar alrededor" ("lookaround"). Para empezar, busquemos el precio de la cadena siguiente `subject:1 pavo cuesta 30€`. Eso es: un número, seguido por el signo `subject:€`. -## Mirar hacia delante -La sintaxis es: `pattern:X(?=Y)`. Esto significa "buscar `pattern:X`, pero encontrar una coincidencia solo si es seguido por `pattern:Y`". Debe haber algún patrón en lugar de `pattern:X` y `pattern:Y`. +## Ver delante + +La sintaxis es: `pattern:X(?=Y)`. Esto significa "buscar `pattern:X`, pero encontrar una coincidencia solo si es seguido por `pattern:Y`". Puede haber cualquier patrón en `pattern:X` y `pattern:Y`. + Para un número entero seguido de `subject:€`, la expresión regular será `pattern:\d+(?=€)`: + ```js run let str = "1 pavo cuesta 30€"; -alert( str.match(/\d+(?=€)/) ); // 30, el número 1 es ignorado, porque no está seguido de € +alert( str.match(/\d+(?=€)/) ); // 30, el número 1 es ignorado porque no está seguido de € ``` -Por favor tenga en cuenta: "mirar hacia delante" es solamente una prueba, lo contenido en los paréntesis `pattern:(?=...)` no es incluido en el resultado `match:30`. -Cuando buscamos por `pattern:X(?=Y)`, el buscador de expresión regular encuentra `pattern:X` y luego verifica si existe algún `pattern:Y` inmediatamente después de él. Si no se cumple, entonces la posible coincidencia es omitida, y la búsqueda continua. +Tenga en cuenta: "ver delante" es solamente una prueba, lo contenido en los paréntesis `pattern:(?=...)` no es incluido en el resultado `match:30`. + +Cuando buscamos `pattern:X(?=Y)`, el motor de expresión regular encuentra `pattern:X` y luego verifica si existe `pattern:Y` inmediatamente después de él. Si no existe, entonces la coincidencia potencial es omitida y la búsqueda continúa. + +Es posible realizar pruebas más complejas, por ejemplo `pattern:X(?=Y)(?=Z)` significa: -Es posible realizar pruebas más complejas, e.j. `pattern:X(?=Y)(?=Z)` significa: 1. Encuentra `pattern:X`. -2. Verifica si `pattern:Y` está inmediatamente después de `pattern:X` (omitir si no es así). -3. Verifica si `pattern:Z` está también inmediatamente después de `pattern:X` (omitir si no es así). -4. Si ambos casos se cumplen, entonces el `pattern:X` es una coincidencia, de lo contrario, continúe buscando. +2. Verifica si `pattern:Y` está inmediatamente después de `pattern:X` (omite si no es así). +3. Verifica si `pattern:Z` está también inmediatamente después de `pattern:X` (omite si no es así). +4. Si ambas verificaciones se cumplen, el `pattern:X` es una coincidencia. De lo contrario continúa buscando. En otras palabras, dicho patrón significa que estamos buscando por `pattern:X` seguido de `pattern:Y` y `pattern:Z` al mismo tiempo. -Eso solo es posible si los patrones `pattern:Y` y `pattern:Z` no son mutuamente exclusivos. -Por ejemplo, `pattern:\d+(?=\s)(?=.*30)` busca por `pattern:\d+` solo si es seguido por un espacio, y si hay `30` en algún lugar después de eso: + +Eso es posible solamente si los patrones `pattern:Y` y `pattern:Z` no se excluyen mutuamente. + +Por ejemplo, `pattern:\d+(?=\s)(?=.*30)` busca por `pattern:\d+` y reconoce coincidencia solo si es seguido por un espacio y además hay un `30` en algún lugar después del número encontrado: + ```js run let str = "1 pavo cuesta 30€"; alert( str.match(/\d+(?=\s)(?=.*30)/) ); // 1 ``` -En nuestra cadena eso coincide exactamente con el número `1`. -## Mirada hacia delante negativa +En nuestra cadena eso coincide exactamente con el número `1`. + +## Ver delante negativo + +Digamos que queremos una cantidad, no un precio de la misma cadena. Eso es el número `pattern:\d+` NO seguido por `subject:€`. + +Para eso se puede aplicar un "ver delante negativo" ("negative lookahead"). -Digamos que queremos una cantidad, no un precio de la misma cadena. Eso es el número `pattern:\d+`, NO seguido por `subject:€`. -Por eso se puede aplicar una "mirada hacia delante negativa" ("negative lookahead"). La sintaxis es: `pattern:X(?!Y)`, que significa "busca `pattern:X`, pero solo si no es seguido por `pattern:Y`". ```js run @@ -45,23 +57,27 @@ let str = "2 pavos cuestan 60€"; alert( str.match(/\d+\b(?!€)/g) ); // 2 (el precio es omitido) ``` -## Mirar atras +## Ver detrás + +"Ver delante" permite agregar una condicion para "lo que sigue". + +"Ver detrás" es similar. Permite coincidir un patrón solo si hay algo antes de él. -Mirar hacia delante permite agregar a una condicion para "lo que sigue". -Mirar hacia atrás es similar. Es decir, permite coincidir un patrón solo si hay algo antes de el. La sintaxis es: -- Mirar hacia atrás positivo: `pattern:(?<=Y)X`, coincide `pattern:X`, pero solo si hay `pattern:Y` antes de el. -- Mirar hacia atrás negativo: `pattern:(? Date: Tue, 2 Mar 2021 06:26:01 -0300 Subject: [PATCH 08/11] Update article.md --- .../14-regexp-lookahead-lookbehind/article.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index b8c3020aa..e7f560a06 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -2,13 +2,13 @@ A veces necesitamos buscar únicamente aquellas coincidencias donde un patrón es precedido o seguido por otro patrón. -Existe una sintaxis especial para eso llamada "ver delante" y "ver detrás" (del ingles: "lookahead" y "lookbehind"), juntas son conocidas como "ver alrededor" ("lookaround"). +Existe una sintaxis especial para eso llamada "ver delante" y "ver detrás" (del ingles: "lookahead" y "lookbehind"), juntas son conocidas como "ver alrededor" ("lookaround"). Nota en español: se considera el flujo de lectura, "ahead" o "delante" es lo que tiene a la derecha (lo siguiente por leer), mientras que "behind" o "detrás" es lo que tiene a la izquierda (lo ya leido, no lo que viene "después"). Para empezar, busquemos el precio de la cadena siguiente `subject:1 pavo cuesta 30€`. Eso es: un número, seguido por el signo `subject:€`. ## Ver delante -La sintaxis es: `pattern:X(?=Y)`. Esto significa "buscar `pattern:X`, pero encontrar una coincidencia solo si es seguido por `pattern:Y`". Puede haber cualquier patrón en `pattern:X` y `pattern:Y`. +La sintaxis es: `pattern:X(?=Y)`. Esto significa "buscar `pattern:X`, pero considerarlo una coincidencia solo si es seguido por `pattern:Y`". Puede haber cualquier patrón en `pattern:X` y `pattern:Y`. Para un número entero seguido de `subject:€`, la expresión regular será `pattern:\d+(?=€)`: @@ -33,7 +33,7 @@ En otras palabras, dicho patrón significa que estamos buscando por `pattern:X` Eso es posible solamente si los patrones `pattern:Y` y `pattern:Z` no se excluyen mutuamente. -Por ejemplo, `pattern:\d+(?=\s)(?=.*30)` busca un `pattern:\d+` que sea seguido por un espacio y además haya un `30` en algún lugar después de él `pattern:(?=.*30)`: +Por ejemplo, `pattern:\d+(?=\s)(?=.*30)` busca un `pattern:\d+` que sea seguido por un espacio `pattern:(?=\s)` y que también tenga un `30` en algún lugar después de él `pattern:(?=.*30)`: ```js run let str = "1 pavo cuesta 30€"; @@ -61,13 +61,13 @@ alert( str.match(/\d+\b(?!€)/g) ); // 2 (el precio es omitido) "Ver delante" permite agregar una condicion para "lo que sigue". -"Ver detrás" es similar. Permite coincidir un patrón solo si hay algo antes de él. +"Ver detrás" es similar. Permite coincidir un patrón solo si hay algo anterior a él. La sintaxis es: - Ver detrás positivo: `pattern:(?<=Y)X`, coincide `pattern:X`, pero solo si hay `pattern:Y` antes de él. - Ver detrás negativo: `pattern:(? Date: Tue, 2 Mar 2021 07:32:47 -0300 Subject: [PATCH 09/11] Update article.md --- 9-regular-expressions/14-regexp-lookahead-lookbehind/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index e7f560a06..a02ba8759 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -2,7 +2,7 @@ A veces necesitamos buscar únicamente aquellas coincidencias donde un patrón es precedido o seguido por otro patrón. -Existe una sintaxis especial para eso llamada "ver delante" y "ver detrás" (del ingles: "lookahead" y "lookbehind"), juntas son conocidas como "ver alrededor" ("lookaround"). Nota en español: se considera el flujo de lectura, "ahead" o "delante" es lo que tiene a la derecha (lo siguiente por leer), mientras que "behind" o "detrás" es lo que tiene a la izquierda (lo ya leido, no lo que viene "después"). +Existe una sintaxis especial para eso llamada "ver delante" y "ver detrás" (del ingles: "lookahead" y "lookbehind"), juntas son conocidas como "ver alrededor" ("lookaround"). Para empezar, busquemos el precio de la cadena siguiente `subject:1 pavo cuesta 30€`. Eso es: un número, seguido por el signo `subject:€`. From cc56b85661c7634d1d3bd08833fffbf94c6c6436 Mon Sep 17 00:00:00 2001 From: joaquinelio Date: Fri, 18 Jun 2021 05:17:15 -0300 Subject: [PATCH 10/11] looks --- .../14-regexp-lookahead-lookbehind/article.md | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index a02ba8759..1c562e259 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -1,12 +1,12 @@ -# Ver delante (lookahead) y ver detrás (lookbehind) +# Lookahead y lookbehind (revisar delante/detrás) A veces necesitamos buscar únicamente aquellas coincidencias donde un patrón es precedido o seguido por otro patrón. -Existe una sintaxis especial para eso llamada "ver delante" y "ver detrás" (del ingles: "lookahead" y "lookbehind"), juntas son conocidas como "ver alrededor" ("lookaround"). +Existe una sintaxis especial para eso llamadas "lookahead" y "lookbehind" ("ver delante" y "ver detrás"), juntas son conocidas como "lookaround" ("ver alrededor"). Para empezar, busquemos el precio de la cadena siguiente `subject:1 pavo cuesta 30€`. Eso es: un número, seguido por el signo `subject:€`. -## Ver delante +## Lookahead La sintaxis es: `pattern:X(?=Y)`. Esto significa "buscar `pattern:X`, pero considerarlo una coincidencia solo si es seguido por `pattern:Y`". Puede haber cualquier patrón en `pattern:X` y `pattern:Y`. @@ -18,7 +18,7 @@ let str = "1 pavo cuesta 30€"; alert( str.match(/\d+(?=€)/) ); // 30, el número 1 es ignorado porque no está seguido de € ``` -Tenga en cuenta: "ver delante" es solamente una prueba, lo contenido en los paréntesis `pattern:(?=...)` no es incluido en el resultado `match:30`. +Tenga en cuenta: "lookahead" es solamente una prueba, lo contenido en los paréntesis `pattern:(?=...)` no es incluido en el resultado `match:30`. Cuando buscamos `pattern:X(?=Y)`, el motor de expresión regular encuentra `pattern:X` y luego verifica si existe `pattern:Y` inmediatamente después de él. Si no existe, entonces la coincidencia potencial es omitida y la búsqueda continúa. @@ -43,11 +43,11 @@ alert( str.match(/\d+(?=\s)(?=.*30)/) ); // 1 En nuestra cadena eso coincide exactamente con el número `1`. -## Ver delante negativo +## Lookahead negativo Digamos que queremos una cantidad, no un precio de la misma cadena. Eso es el número `pattern:\d+` NO seguido por `subject:€`. -Para eso se puede aplicar un "ver delante negativo" ("negative lookahead"). +Para eso se puede aplicar un "lookahead negativo". La sintaxis es: `pattern:X(?!Y)`, que significa "busca `pattern:X`, pero solo si no es seguido por `pattern:Y`". @@ -57,15 +57,15 @@ let str = "2 pavos cuestan 60€"; alert( str.match(/\d+\b(?!€)/g) ); // 2 (el precio es omitido) ``` -## Ver detrás +## Lookbehind -"Ver delante" permite agregar una condicion para "lo que sigue". +"lookahead" permite agregar una condicion para "lo que sigue". -"Ver detrás" es similar. Permite coincidir un patrón solo si hay algo anterior a él. +"Lookbehind" es similar. Permite coincidir un patrón solo si hay algo anterior a él. La sintaxis es: -- Ver detrás positivo: `pattern:(?<=Y)X`, coincide `pattern:X`, pero solo si hay `pattern:Y` antes de él. -- Ver detrás negativo: `pattern:(? Date: Fri, 18 Jun 2021 05:20:58 -0300 Subject: [PATCH 11/11] Update article.md --- .../14-regexp-lookahead-lookbehind/article.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md index 1c562e259..12d5376da 100644 --- a/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md +++ b/9-regular-expressions/14-regexp-lookahead-lookbehind/article.md @@ -18,7 +18,7 @@ let str = "1 pavo cuesta 30€"; alert( str.match(/\d+(?=€)/) ); // 30, el número 1 es ignorado porque no está seguido de € ``` -Tenga en cuenta: "lookahead" es solamente una prueba, lo contenido en los paréntesis `pattern:(?=...)` no es incluido en el resultado `match:30`. +Tenga en cuenta que "lookahead" es solamente una prueba, lo contenido en los paréntesis `pattern:(?=...)` no es incluido en el resultado `match:30`. Cuando buscamos `pattern:X(?=Y)`, el motor de expresión regular encuentra `pattern:X` y luego verifica si existe `pattern:Y` inmediatamente después de él. Si no existe, entonces la coincidencia potencial es omitida y la búsqueda continúa. @@ -59,7 +59,7 @@ alert( str.match(/\d+\b(?!€)/g) ); // 2 (el precio es omitido) ## Lookbehind -"lookahead" permite agregar una condicion para "lo que sigue". +"lookahead" permite agregar una condición para "lo que sigue". "Lookbehind" es similar. Permite coincidir un patrón solo si hay algo anterior a él.