Hoja de trucos de expresiones regulares
Las expresiones regulares son lo suficientemente compactas como para que la sintaxis sea más fácil de buscar que de memorizar. Esta página lo contiene todo en una sola pantalla (clases, cuantificadores, anclas, grupos, búsqueda, escape y banderas) con un ejemplo práctico para cada fila.
El tipo es JavaScript, que es lo que se ejecuta en su navegador y lo que utiliza el probador de expresiones regulares de este sitio. La mayor parte es idéntica en Python, Java, Go y PCRE; donde los sabores divergen, divergen en los bordes: soporte de búsqueda hacia atrás, sintaxis de grupo con nombre y si \d significa "dígito ASCII" o "cualquier dígito Unicode".
Dos cosas explican la mayoría de las sorpresas. Los cuantificadores son codiciosos: toman todo lo que pueden y lo devuelven sólo cuando el resto del patrón falla, razón por la cual <.+> se traga dos etiquetas y <.+?> no. Y la alternancia es la que menos vincula, por lo que ^a|b$ significa "comienza con a o termina con b", no es lo que la mayoría de la gente pretende cuando lo escribe.
Clases de personajes
Las abreviaturas son solo ASCII a menos que agregue el indicador u y use escapes de propiedades Unicode.
| Sintaxis | Significado | Ejemplo |
|---|---|---|
| . | Cualquier carácter excepto un salto de líneaAgregue la bandera s para que también coincida con las nuevas líneas. | /a.c/"abc" → "abc" |
| \d | Un dígito, 0–9 | /\d+/"order 42" → "42" |
| \D | Todo lo que no sea un dígito | /\D+/"42abc" → "abc" |
| \w | Letra, dígito o guión bajoSólo ASCII: "é" no es \w. | /\w+/"user_1!" → "user_1" |
| \W | Cualquier cosa \w no coincide | /\W+/"a++b" → "++" |
| \s | Cualquier espacio en blanco, incluidas pestañas y nuevas líneas. | /\s+/"a \t b" → " \t " |
| \S | Cualquier carácter que no sea un espacio en blanco | /\S+/" hi" → "hi" |
| [abc] | Cualquiera de los personajes enumerados | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Cualquier personaje excepto los listados. | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Una variedad de personajes | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Cualquier letra Unicode (necesita la bandera u) | /\p{L}+/"42 café" → "café" |
Cuantificadores
Todos ellos son codiciosos por defecto: toman todo lo que pueden y devuelven sólo si el resto del patrón falla.
| Sintaxis | Significado | Ejemplo |
|---|---|---|
| * | Cero o más | /ab*/"a" → "a" |
| + | Uno o más | /ab+/"abbb" → "abbb" |
| ? | Cero o uno: lo hace opcional | /colou?r/"color" → "color" |
| {3} | exactamente tres | /\d{3}/"id 12345" → "123" |
| {2,} | Dos o más | /a{2,}/"aaa" → "aaa" |
| {2,4} | Entre dos y cuatro | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Perezoso: toma lo menos posibleEl codicioso <.+> se tragaría ambas etiquetas. | /<.+?>/"<a><b>" → "<a>" |
Anclas y límites
Estos coinciden con una posición, no con un personaje, por lo que no consumen nada.
| Sintaxis | Significado | Ejemplo |
|---|---|---|
| ^ | Inicio de la cadena, o de una línea con la bandera m | /^a/"abc" → "a" |
| $ | Fin de la cadena, o de una línea con la bandera m | /c$/"abc" → "c" |
| \b | Un límite de palabrasEsto es lo que impide que "gato" coincida dentro de "concatenar". | /\bcat\b/"the cat sat" → "cat" |
| \B | No hay límite de palabras | /\Bcat/"concatenate" → "cat" |
Grupos y alternancia
| Sintaxis | Significado | Ejemplo |
|---|---|---|
| (abc) | Grupo de captura: recordado para reemplazo | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Agrupar sin capturarUtilízalo cuando sólo necesites la agrupación; mantiene los números de captura significativos. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Grupo de captura con nombre | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Cualquiera de los dos lados: alternanciaLa alternancia tiene la prioridad más baja: ^a|b$ es "^a" o "b$", no "^(a|b)$". | /cat|dog/"one dog" → "dog" |
| \1 | Referencia al primer grupo | /(\w)\1/"letter" → "tt" |
Mirar a tu alrededor
Afirmaciones sobre lo que rodea a un cargo. No combinan con nada en sí mismos, lo que los hace seguros para combinar.
| Sintaxis | Significado | Ejemplo |
|---|---|---|
| (?=…) | Lookahead - seguido de esto | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Previsión negativa: no seguida de esto | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Mirar hacia atrás: precedido por esto | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Mirada hacia atrás negativa, no precedida por esto | /(?<!\$)\b\d+/"about 40" → "40" |
Escapando
Estos doce caracteres son los que necesitan una barra invertida para ser tomados literalmente.
| Sintaxis | Significado | Ejemplo |
|---|---|---|
| \. | Un punto literal | /\d\.\d/"v2.5" → "2.5" |
| \\ | Una barra invertida literal | /\\/"C:\\dir" → "\\" |
| \n | Un salto de línea | /a\nb/"a\nb" → "a\nb" |
| \t | una pestaña | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Un carácter por su punto de código | /\u00e9/"café" → "é" |
Banderas
| Bandera | Nombre | Significado |
|---|---|---|
| g | Global | Encuentra todas las coincidencias, no solo la primera. |
| i | ignorar caso | Coincide independientemente de mayúsculas o minúsculas. |
| m | multilínea | Hace que ^ y $ coincidan en cada salto de línea en lugar de solo en los extremos de la cadena. |
| s | Punto todo | Vamos. La línea de coincidencia también se rompe. |
| u | Unicódigo | Trata el patrón como puntos de código y habilita los escapes de propiedad \p{...}. |
| y | Pegajoso | Coincide solo exactamente con el último índice, nunca busca hacia adelante. |