Descargar

Patrones de texto: Regex

Una expresión regular describe un patrón de texto: "uno o más dígitos", "una palabra seguida de @"... HyperEZ usa la sintaxis de JavaScript. Escribe los patrones con r"..." para no tener que duplicar las barras invertidas.

var numero = Regex(r"\d+")
print(numero.test("tengo 3 gatos"))               // ¿aparece?
print(numero.find("año 2026").text)                // primera coincidencia
print(numero.findAll("1, 22 y 333").map(m => m.text))
print(numero.replace("x1 y22", "#"))
print(Regex(r"\s*,\s*").split("a , b,c"))
▶ Probar en el editor

Coincidencias

find devuelve {text, start, end, groups} (o null); las posiciones se cuentan en caracteres. groups tiene lo que capturan los paréntesis:

var fecha = Regex(r"(\d{2})/(\d{2})/(\d{4})")
var m = fecha.find("Nací el 25/12/2001.")
print(m.text, m.start, m.groups)
print(fecha.replace("25/12/2001", "$3-$2-$1"))   // $1, $2... son los grupos
▶ Probar en el editor

El reemplazo también puede ser una función que recibe cada coincidencia:

print(Regex(r"\d+").replace("3 manzanas y 12 peras", m => str(toNumber(m.text) * 2)))
▶ Probar en el editor

Validar

matches comprueba que el texto entero encaja:

var email = Regex(r"^[\w.+-]+@[\w-]+\.[a-z]{2,}$", "i")   // "i": sin distinguir mayúsculas
print(email.matches("ana@correo.es"), email.matches("no es un email"))
▶ Probar en el editor

Opciones (segundo argumento): "i" ignora mayúsculas, "m" hace que ^ y $ funcionen en cada línea.

Atajos en los textos

print("v1.2.3".matches(r"\d"), "v1.2.3".replaceRegex(r"\d", "#"))
print(Regex.escape("1+1=2?"))   // para buscar un texto literal con caracteres especiales
▶ Probar en el editor

Chuleta

PatrónSignifica
.cualquier carácter
\d \w \sdígito, letra/dígito/_, espacio
\D \W \Slo contrario
[abc] [^abc] [a-z]uno de esos / ninguno de esos / un intervalo
x* x+ x? x{2,4}0 o más, 1 o más, 0 o 1, entre 2 y 4
^ $principio y final
(...)grupo (se captura)
`a\b`a o b
\blímite de palabra

Nota: las clases como \w solo reconocen letras sin acento; para palabras en español usa por ejemplo [^\s.,;:!?]+.