Chuleta de regex
Las expresiones regulares son lo bastante compactas como para que su sintaxis sea más fácil de consultar que de memorizar. Esta página es toda ella en una sola pantalla —clases, cuantificadores, anclas, grupos, lookaround, escapado y los flags— con un ejemplo funcional para cada fila.
El sabor es JavaScript, que es lo que se ejecuta en tu navegador y lo que usa el probador de regex de este sitio. La mayor parte es idéntica en Python, Java, Go y PCRE; donde los sabores divergen, lo hacen en los bordes: el soporte de lookbehind, la sintaxis de los grupos 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 voraces: toman todo lo que pueden y solo devuelven cuando el resto del patrón falla, y por eso <.+> se traga dos etiquetas y <.+?> no. Y la alternación es la que liga más débilmente de todo, así que ^a|b$ significa «empieza por a, o termina en b», no lo que la mayoría pretende al escribirlo.
Clases de caracteres
11Las abreviaturas son solo ASCII a menos que añadas el flag u y uses escapes de propiedad Unicode.
| Sintaxis | Significado | Ejemplo |
|---|---|---|
| . | Cualquier carácter excepto un salto de líneaAñade el flag s para que coincida también con los saltos de línea. | /a.c/"abc" → "abc" |
| \d | Un dígito, 0–9 | /\d+/"order 42" → "42" |
| \D | Cualquier cosa que no sea un dígito | /\D+/"42abc" → "abc" |
| \w | Letra, dígito o guion bajoSolo ASCII: «é» no es \w. | /\w+/"user_1!" → "user_1" |
| \W | Cualquier cosa con la que \w no coincida | /\W+/"a++b" → "++" |
| \s | Cualquier espacio en blanco, incluidos tabulaciones y saltos de línea | /\s+/"a \t b" → " \t " |
| \S | Cualquier carácter que no sea espacio en blanco | /\S+/" hi" → "hi" |
| [abc] | Cualquiera de los caracteres indicados | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Cualquier carácter excepto los indicados | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Un rango de caracteres | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Cualquier letra Unicode (necesita el flag u) | /\p{L}+/"42 café" → "café" |
Cuantificadores
7Todos ellos son voraces por defecto: toman tanto como pueden y solo devuelven 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 voraz <.+> se tragaría ambas etiquetas. | /<.+?>/"<a><b>" → "<a>" |
Anclas y límites
4Estos coinciden con una posición, no con un carácter, así que no consumen nada.
| Sintaxis | Significado | Ejemplo |
|---|---|---|
| ^ | Inicio de la cadena, o de una línea con el flag m | /^a/"abc" → "a" |
| $ | Fin de la cadena, o de una línea con el flag m | /c$/"abc" → "c" |
| \b | Un límite de palabraEsto es lo que impide que «cat» coincida dentro de «concatenate». | /\bcat\b/"the cat sat" → "cat" |
| \B | No es un límite de palabra | /\Bcat/"concatenate" → "cat" |
Grupos y alternación
5| Sintaxis | Significado | Ejemplo |
|---|---|---|
| (abc) | Grupo de captura — recordado para el reemplazo | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Agrupar sin capturarUsa esto cuando solo necesitas la agrupación; mantiene con sentido los números de captura. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Grupo de captura con nombre | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Uno u otro lado — alternaciónLa alternación tiene la precedencia más baja: ^a|b$ es «^a» o «b$», no «^(a|b)$». | /cat|dog/"one dog" → "dog" |
| \1 | Retrorreferencia al primer grupo | /(\w)\1/"letter" → "tt" |
Lookaround
4Aserciones sobre lo que rodea a una posición. Ellas mismas no coinciden con nada, que es lo que las hace seguras de combinar.
| Sintaxis | Significado | Ejemplo |
|---|---|---|
| (?=…) | Lookahead — seguido de esto | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Lookahead negativo — no seguido de esto | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — precedido de esto | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Lookbehind negativo — no precedido de esto | /(?<!\$)\b\d+/"about 40" → "40" |
Escapado
5Estos doce caracteres son los que necesitan una barra invertida para tomarse de forma literal.
| 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 tabulación | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Un carácter por su punto de código | /\u00e9/"café" → "é" |
Flags
6| Flag | Nombre | Significado |
|---|---|---|
| g | Global | Encuentra todas las coincidencias, no solo la primera. |
| i | Ignorar mayúsculas/minúsculas | Coincide sin importar 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 | Dot all | Permite que . coincida también con los saltos de línea. |
| u | Unicode | Trata el patrón como puntos de código y habilita los escapes de propiedad \p{…}. |
| y | Sticky | Coincide únicamente en lastIndex exacto, sin buscar hacia adelante. |