- Notifications
You must be signed in to change notification settings - Fork230
Escaping, special characters#284
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 5 commits intojavascript-tutorial:masterfromcortizg:es.javascript.info.9-07-eJul 12, 2020
Uh oh!
There was an error while loading.Please reload this page.
Merged
Changes fromall commits
Commits
Show all changes
5 commits Select commitHold shift + click to select a range
012fc85
traducción 9-07-e
cortizg9ad392e
Update 9-regular-expressions/07-regexp-escaping/article.md
cortizg4a2b91f
Update 9-regular-expressions/07-regexp-escaping/article.md
cortizgb4eac7c
Update 9-regular-expressions/07-regexp-escaping/article.md
cortizg8f21d97
Update 9-regular-expressions/07-regexp-escaping/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
74 changes: 37 additions & 37 deletions9-regular-expressions/07-regexp-escaping/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,99 +1,99 @@ | ||
#Escapando, caracteres especiales | ||
Como hemos visto, una barra invertida`pattern:\`se usa para denotar clases de caracteres, p.ej. `pattern:\d`.Por lo tanto, es un carácter especial en expresiones regulares (al igual que en las cadenas regulares). | ||
También hay otros caracteres especiales que tienen un significado especial en una expresión regular. Se utilizan para hacer búsquedas más potentes. Aquí hay una lista completa de ellos: `pattern:[ \ ^ $ . | ? * + ( )`. | ||
No intentes recordar la lista: pronto nos ocuparemos de cada uno de ellos por separado y los recordarás fácilmente. | ||
##Escapando | ||
Digamos que queremos encontrar literalmente un punto. No "cualquier carácter",sino solo un punto. | ||
Para usar un carácter especial como uno normal, agrégalo con una barra invertida: `pattern:\.`. | ||
A esto se le llama "escape de carácter". | ||
Por ejemplo: | ||
```js run | ||
alert( "Capítulo 5.1".match(/\d\.\d/) ); // 5.1 (¡Coincide!) | ||
alert( "Capítulo 511".match(/\d\.\d/) ); // null (buscando un punto real \.) | ||
``` | ||
Los paréntesis también son caracteres especiales, por lo que si los buscamos, deberíamos usar`pattern:\(`.El siguiente ejemplo busca una cadena `"g()"`: | ||
```js run | ||
alert( "función g()".match(/g\(\)/) ); // "g()" | ||
``` | ||
Si estamos buscando una barra invertida `\`,como es un carácter especial tanto en cadenas regulares como en expresiones regulares, debemos duplicarlo. | ||
```js run | ||
alert( "1\\2".match(/\\/) ); // '\' | ||
``` | ||
##Una barra | ||
Un símbolo de barra`'/'`no es un carácter especial, pero en JavaScriptse usa para abrir y cerrar expresiones regulares: `pattern:/...pattern.../`,por lo que también debemos escaparlo. | ||
Así es como se ve la búsqueda de una barra`'/'`: | ||
```js run | ||
alert( "/".match(/\//) ); // '/' | ||
``` | ||
Por otro lado, si no estamos usando `pattern:/.../`,pero creamos una expresión regular usando`new RegExp`,entonces no necesitamos escaparla: | ||
```js run | ||
alert( "/".match(new RegExp("/")) ); //encuentra / | ||
``` | ||
## new RegExp | ||
Si estamos creando una expresión regularcon`new RegExp`,entonces no tenemos que escapar la barra`/`,pero sí otros caracteres especiales. | ||
Por ejemplo, considere esto: | ||
```js run | ||
let regexp = new RegExp("\d\.\d"); | ||
alert( "Capítulo 5.1".match(regexp) ); // null | ||
``` | ||
En uno de los ejemplos anteriores funcionó la búsqueda con `pattern:/\d\.\d/`,pero `new RegExp("\d\.\d")`no funciona, ¿por qué? | ||
La razón es que las barras invertidas son "consumidas" por una cadena. Como podemos recordar, las cadenas regulares tienen sus propios caracteres especiales, como`\n`,y se usa una barra invertida para escapar esos caracteres especiales de cadena. | ||
Así es como se percibe"\d\.\d\": | ||
```js run | ||
alert("\d\.\d"); // d.d | ||
``` | ||
Las comillas de cadenas "consumen" barras invertidas y las interpretan como propias, por ejemplo: | ||
- `\n` --se convierte en un carácter de línea nueva, | ||
- `\u1234` --se convierte en el carácter Unicode con dicho código, | ||
- ...Y cuandonohay un significado especial: como `pattern:\d`o `\z`,entonces la barra invertida simplemente se elimina. | ||
Así que`new RegExp`toma una cadena sin barras invertidas. ¡Por eso la búsqueda no funciona! | ||
Para solucionarlo, debemos duplicar las barras invertidas, porque las comillas de cadena convierten`\\`en `\`: | ||
```js run | ||
*!* | ||
let regStr = "\\d\\.\\d"; | ||
*/!* | ||
alert(regStr); // \d\.\d (ahora está correcto) | ||
let regexp = new RegExp(regStr); | ||
alert( "Capítulo 5.1".match(regexp) ); // 5.1 | ||
``` | ||
##Resumen | ||
-Para buscar literalmente caracteres especiales `pattern:[ \ ^ $ . | ? * + ( )`, se les antepone una barra invertida`\` ("escaparlos"). | ||
-Se debe escapar`/`si estamos dentro de`pattern:/.../` (pero no dentro de `new RegExp`). | ||
-Al pasar una cadena a`new RegExp`,se deben duplicar las barras invertidas`\\`,porque las comillas de cadena consumen una. |
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.