- Notifications
You must be signed in to change notification settings - Fork228
Patterns and flags#237
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
vplentinax merged 26 commits intojavascript-tutorial:masterfromcortizg:es.javascript.info.9-01-riJun 11, 2020
Uh oh!
There was an error while loading.Please reload this page.
Merged
Changes fromall commits
Commits
Show all changes
26 commits Select commitHold shift + click to select a range
bf9ca5f
9-01-ri Traducido 18
cortizgcbb314c
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizgf8f5b42
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg70ef326
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizgd3bc30b
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizgfd70dcd
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg056e544
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg5dea5ad
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizge33ec5b
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizgeba3900
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg550039e
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg834ac1a
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg31afb25
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg44e59d9
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg9c34e07
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg43196a1
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizgb285a9e
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizgd8e9a54
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizgb992920
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg98c112e
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizge33144e
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizgee79bcd
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizgdfab9af
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg90232f0
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizg769ec75
Merge branch 'master' into es.javascript.info.9-01-ri
cortizg63d4eb5
Update 9-regular-expressions/01-regexp-introduction/article.md
cortizgFile filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
157 changes: 80 additions & 77 deletions9-regular-expressions/01-regexp-introduction/article.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
@@ -1,177 +1,180 @@ | ||||||||
#Patrones y banderas (flags) | ||||||||
Las expresiones regulares son patrones que proporcionan una forma poderosa de buscar y reemplazar texto. | ||||||||
En JavaScript,están disponibles a través del objeto[RegExp](mdn:js/RegExp), además de integrarse en métodos de cadenas. | ||||||||
##Expresiones Regulares | ||||||||
Una expresiónregular(también "regexp",o simplemente "reg")consiste en un *patrón* y *banderas* opcionales. | ||||||||
Hay dos sintaxis que se pueden usar para crear un objeto de expresión regular. | ||||||||
La sintaxis "larga": | ||||||||
```js | ||||||||
regexp = new RegExp("patrón", "banderas"); | ||||||||
``` | ||||||||
Y el "corto", usando barras `"/"`: | ||||||||
```js | ||||||||
regexp = /pattern/; //sin banderas | ||||||||
regexp = /pattern/gmi; //con banderas g,me i (para ser cubierto pronto) | ||||||||
``` | ||||||||
Las barras`pattern:/.../`le dicen aJavaScriptque estamos creando una expresión regular. Juegan el mismo papel que las comillas para las cadenas. | ||||||||
En ambos casos, `regexp`se convierte en una instancia de la clase incorporada`RegExp`. | ||||||||
La principal diferencia entre estas dos sintaxis es que el patrón que utiliza barras`/.../`no permite que se inserten expresiones (como los literales de plantilla de cadena con`${...}`).Son completamente estáticos. | ||||||||
Las barras se utilizan cuando conocemos la expresiónregularen el momento de escribir el código, y esa es la situación más común. Mientras que`new RegExp`,se usa con mayor frecuencia cuando necesitamos crear una expresión regular "sobre la marcha" a partir de una cadena generada dinámicamente. Por ejemplo: | ||||||||
```js | ||||||||
let tag = prompt("¿Qué etiqueta quieres encontrar?", "h2"); | ||||||||
igual que /<h2>/si respondió "h2"en el mensaje anterior | ||||||||
``` | ||||||||
##Banderas | ||||||||
Las expresiones regulares pueden usar banderas que afectan la búsqueda. | ||||||||
Solo hay 6 de ellas en #"926cb6d766ff6f2ce2eb66157997649afc67b8d81f186206b34ed0b016303e6a"> | ||||||||
`pattern:i` | ||||||||
:Con esta bandera, la búsqueda no distingue entre mayúsculas y minúsculas: nohay diferencia entre`A`y `a` (consulte el ejemplo a continuación). | ||||||||
`pattern:g` | ||||||||
:Con esta bandera, la búsqueda encuentra todas las coincidencias, sin ella, solo se devuelve la primera coincidencia. | ||||||||
`pattern:m` | ||||||||
:Modo multilínea (cubierto en el capítulo <info:regexp-multiline-mode>). | ||||||||
`pattern:s` | ||||||||
: Habilita el modo "dotall", que permite que un punto `pattern:.` coincida con el carácter de línea nueva `\n` (cubierto en el capítulo <info:regexp-character-classes>). | ||||||||
`pattern:u` | ||||||||
:Permite el soporte completo de Unicode. La bandera permite el procesamiento correcto de pares sustitutos. Más del tema en el capítulo <info:regexp-unicode>. | ||||||||
`pattern:y` | ||||||||
:Modo "adhesivo": búsqueda en la posición exacta del texto (cubierto en el capítulo <info:regexp-sticky>) | ||||||||
```smart header="Colores" | ||||||||
A partir de aquí, el esquema de color es: | ||||||||
- regexp -- `pattern:red` | ||||||||
-cadena (donde buscamos) -- `subject:blue` | ||||||||
-resulta -- `match:green` | ||||||||
``` | ||||||||
##Buscando: str.match | ||||||||
Como se mencionó anteriormente, las expresiones regulares se integran con los métodos de cadena. | ||||||||
El método `str.match(regex)`busca todas las coincidencias de `regex` en la cadena `str`. | ||||||||
Tiene 3 modos de trabajo: | ||||||||
1.Si la expresiónregulartiene la bandera `pattern:g`,devuelve un arreglo de todas las coincidencias: | ||||||||
```js run | ||||||||
let str = "We will, we will rock you"; | ||||||||
alert( str.match(/we/gi) ); // We,we (un arreglo de 2subcadenas que coinciden) | ||||||||
``` | ||||||||
Tenga en cuenta que tanto`match:We`como `match:we`se encuentran, porque la bandera`pattern:i`hace que la expresiónregularno distinga entre mayúsculas y minúsculas. | ||||||||
2.Sinoexiste dicha bandera, solo devuelve la primera coincidencia en forma de arreglo, con la coincidencia completa en el índice`0`y algunos detalles adicionales en las propiedades: | ||||||||
```js run | ||||||||
let str = "We will, we will rock you"; | ||||||||
let result = str.match(/we/i); //sin la bandera g | ||||||||
alert( result[0] ); // We (1ra coincidencia) | ||||||||
alert( result.length ); // 1 | ||||||||
//Detalles: | ||||||||
alert( result.index ); // 0 (posición de la coincidencia) | ||||||||
alert( result.input ); // We will, we will rock you (cadena fuente) | ||||||||
``` | ||||||||
El arreglo puede tener otros índices, además de`0`si una parte de la expresiónregularestá encerrada entre paréntesis. Cubriremos eso en el capítulo <info:regexp-groups>. | ||||||||
3.Y, finalmente, sinohay coincidencias, se devuelve`null`(no importa si hay una bandera`pattern:g`o no). | ||||||||
Este es un matiz muy importante. Sinohay coincidencias, no recibimos un arreglo vacío, sino que recibimos `null`.Olvidar eso puede conducir a errores, por ejemplo: | ||||||||
```js run | ||||||||
let matches = "JavaScript".match(/HTML/); // = null | ||||||||
if (!matches.length) { // Error:No se puede leer la propiedad'length'de null | ||||||||
alert("Erroren la línea anterior"); | ||||||||
} | ||||||||
``` | ||||||||
Si queremos que el resultado sea siempre un arreglo, podemos escribirlo de esta manera: | ||||||||
```js run | ||||||||
let matches = "JavaScript".match(/HTML/)*!* || []*/!*; | ||||||||
if (!matches.length) { | ||||||||
alert("Sin coincidencias"); //ahora si trabaja | ||||||||
} | ||||||||
``` | ||||||||
##Reemplazando: str.replace | ||||||||
El método `str.replace(regexp, replacement)`reemplaza las coincidencias encontradas usando`regexp`en la cadena`str`con `replacement` (todas las coincidencias si está la bandera`pattern:g`,de lo contrario, solo la primera). | ||||||||
Por ejemplo: | ||||||||
```js run | ||||||||
//sin la bandera g | ||||||||
alert( "We will, we will".replace(/we/i, "I") ); // I will, we will | ||||||||
//con la bandera g | ||||||||
alert( "We will, we will".replace(/we/ig, "I") ); // I will, I will | ||||||||
``` | ||||||||
El segundo argumento es la cadena de`replacement`. Podemos usar combinaciones de caracteres especiales para insertar fragmentos de la coincidencia: | ||||||||
|Símbolos |Acción en la cadena de reemplazo | | ||||||||
|--------|--------| | ||||||||
|`$&`|inserta toda la coincidencia| | ||||||||
|<code>$`</code>|inserta una parte de la cadena antes de la coincidencia| | ||||||||
|`$'`|inserta una parte de la cadena después de la coincidencia| | ||||||||
|`$n`|si `n`es un número de1-2dígitos, entonces inserta el contenido de los paréntesis n-ésimo, más del tema en el capítulo <info:regexp-groups>| | ||||||||
|`$<name>`|inserta el contenido de los paréntesis con el `nombre` dado, más del tema en el capítulo <info:regexp-groups>| | ||||||||
|`$$`|inserta el carácter `$` | | ||||||||
Un ejemplo con `pattern:$&`: | ||||||||
```js run | ||||||||
alert( "Me gusta HTML".replace(/HTML/, "$&y JavaScript") ); //Me gusta HTMLy JavaScript | ||||||||
``` | ||||||||
##Pruebas: regexp.test | ||||||||
El método `regexp.test(str)`busca al menos una coincidencia, si se encuentra, devuelve `true`,de lo contrario `false`. | ||||||||
```js run | ||||||||
let str = "Me gusta JavaScript"; | ||||||||
let regexp = /GUSTA/i; | ||||||||
alert( regexp.test(str) ); // true | ||||||||
``` | ||||||||
Más adelante en este capítulo estudiaremos más expresiones regulares, exploraremos más ejemplos y también conoceremos otros métodos. | ||||||||
La información completa sobre métodos se proporciona en el artículo <info:regexp-method>. | ||||||||
##Resumen | ||||||||
-Una expresiónregularconsiste en un patrón y banderas opcionales: `pattern:g`, `pattern:i`, `pattern:m`, `pattern:u`, `pattern:s`, `pattern:y`. | ||||||||
-Sin banderas y símbolos especiales (que estudiaremos más adelante),la búsqueda por expresión regular es lo mismo que una búsqueda de subcadena. | ||||||||
-El método `str.match(regexp)`busca coincidencias: devuelve todas si hay una bandera`pattern:g`, de lo contrario, solo la primera. | ||||||||
-El método `str.replace(regexp, replacement)`reemplaza las coincidencias encontradas usando`regexp`con `replacement`:devuelve todas si hay una bandera`pattern:g`, de lo contrario solo la primera. | ||||||||
-El método `regexp.test(str)`devuelve `true`si hay al menos una coincidencia, de lo contrario, devuelve `false`. |
4 changes: 2 additions & 2 deletions9-regular-expressions/index.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
#Expresiones Regulares | ||
Las expresiones regulares son una forma poderosa de hacer búsqueda y reemplazo de cadenas. |
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.