La Guía Rápida del Desarrollador de Expresiones Regulares النماذج التي يستحق حفظها
El patrón de expresión regular es una de esas habilidades que genera beneficios en cada lenguaje que escribas. El mismo patrón que valida un correo electrónico en Python elimina cadenas de consulta en Go y limpia la entrada del formulario en JavaScript. Apréndelo una vez, úsalo en todas partes.
Esto no es un manual de sintaxis. Son los patrones que realmente usas en proyectos reales — aquellos que aparecen en validadores de formularios, parsers de registros, rutas de URLs y tuberías de datos. La tabla a continuación es el núcleo del tema. El texto que la rodea explica dónde las personas se queman.
Los patrones que merecen conservar
Estos 11 patrones cubren los escenarios que aparecen repetidamente en el código de producción. Usa Pruebas de Regex para validar estos elementos con tus propios datos de entrada antes de conectarlos.
| نمط | ¿Qué se corresponde | Ejemplo de Partido | ملحوظات |
|---|---|---|---|
^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$ | عنوان البريد الإلكتروني | user@example.com | Diseñado de manera permisiva — la implementación real del RFC 5322 es un agujero de conejo. Ancla con ^$. |
https?:\/\/[\w\-._~:/?#[\]@!$&'()*+,;=%]+ | URL de HTTP/HTTPS | https://example.com/path?q=1 | No valida estructura — solo confirma que parece ser una URL. |
^(\d{1,3}\.){3}\d{1,3}$ | Dirección IPv4 (formato solo) | 192.168.1.1 | Coincidencias 999.999.999.999 — validar el rango en el código, no en la expresión regular. |
^(\+\d{1,3}[\s-])?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$ | número de teléfono norteamericano | (555) 867-5309 | Trata los delimitadores comunes. Los formatos internacionales varían demasiado para un único patrón. |
[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} | UUID versión 4 | 550e8400-e29b-41d4-a716-446655440000 | Insensitivo a mayúsculas — use i bandar o añadir A-F clases de caracteres. |
^[a-z0-9]+(?:-[a-z0-9]+)*$ | enlace de URL | my-article-title | No hifas iniciales ni finales, sin hifas consecutivas. |
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ | Fecha ISO 8601 (AAAA-MM-DD) | 2026-04-10 | Verifica el formato y rango, pero no valida la fecha del calendario (febrero 31 pasa). |
^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$ | color hexa CSS | #ff6600 أو #f60 | Ambos códigos de abreviatura de **3** y **6** dígitos. Añade {8} para hexadecimal RGBA de 8 dígitos |
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-([\w.-]+))?(?:\+([\w.-]+))?$ | Cadena de versión semántica | 1.2.3-beta.1+build.42 | Recopila metadatos de versión y construcción como grupos opcionales. |
\b(?:\d{4}[\s-]?){3}\d{4}\b | Número de tarjeta de crédito (mascarado, no validar) | 4111 1111 1111 1111 | Usa para mascarar en registros, no para validación. Verificación de número de Luhn requiere código. |
\s+ | Espacio en blanco corre | "hello world" → "hello world" | Sustituya un espacio único para la normalización del espacio. |
Dónde los patrones se rompen en la práctica
Hambreño vs. Despistado de coincidencias
Cuantificadores como * و + son avaros por defecto — consumen todo lo posible. Esto te afecta al extraer contenido entre delimitadores. <.+> en el <b>bold</b> coincide con la cadena completa, no <b>Cambia a **lento** con .+? para detenerse en el primer delimitador de cierre en lugar del último.
Anclaje: Cuando **y** y $ no son suficientes
Sin anclas, un patrón puede coincidir en cualquier lugar de una cadena. \d+ coinciden abc123def — encuentra los dígitos del medio. Para la validación de cadena completa, envuelve los patrones en ^...$En modo de múltiples líneas (m no bandera) ^ و $ mantenga los límites de línea, no las fronteras completas de la cadena. Si estás validando un solo valor (un correo electrónico, un UUID), configúralo así: m intencionalmente, no por costumbre.
El Error del Bandera de Líneas Múltiples
ال m el pañuelo cambia lo que es ^ و $ significado. El s el modo **dotAll** modifica . coinciden — sin ello, . no coincide con los caracteres de nueva línea. Analizando entradas de registro multilineas. .+¿Necesitas s أو [\s\S]+ como alternativa para motores que no soportan `dotAll`.
Pruebas Antes de la Conexión
No debes introducir un patrón regular (regex) en una aplicación y probarlo solo con una entrada de camino principal feliz. Los patrones fallan en casos límite: caracteres Unicode, cadenas vacías, espacios en blanco al inicio o final, entradas que casi pero no del todo son válidas. Prueba de RegEx Tester IO Tools puede ejecutar un patrón contra múltiples cadenas de prueba simultáneamente para que pueda verificar los casos válidos y los inválidos al mismo tiempo antes de que el código se envíe. Herramienta de ficha rápida para expresiones regulares útil cuando estás en medio de crear un patrón y necesitas una referencia rápida de sintaxis sin salir del navegador.
Al momento de probar, construya una matriz: qué debe coincidir, qué **definitivamente no** debe coincidir y qué está en el límite. Un validador de correos electrónicos que acepta user@ rechaza user+tag@example.co.uk es peor que ningún validador en absoluto.
Características Lingüísticas que Vale la Pena Conocer
Los patrones de la tabla arriba son ampliamente portátiles, pero el motor importa en los bordes.
- جافا سكريبت Usa el motor de expresiones regulares ECMA. Grupos de captura nombrados (
(?<name>...)sonido y video son compatibles desde ES2018+.vbandera (presentada en ES2024) añade notación de conjuntos y escapes de propiedades de Unicode. Los *lookbehind* funcionan; los *lookbehind* largos son compatibles desde ES2018+ y tienen restricciones de longitud variables en algunas versiones antiguas de V8. - بايثون usa el
remódulo (adjacente a PCRE pero no idéntico). Elre.compile()patrón vale la pena usar — los patrones compilados son más rápidos cuando se llaman repetidamente en bucles. Una diferencia sutil: el de Python\bel límite de palabras es consciente por defecto del código Unicode, por lo que funciona con caracteres de palabras no ASCII. El JavaScript\bes solo ASCII hasta que uses eluأوvbandera. - يذهب Usa sintaxis de RE2, que excluye deliberadamente referencias cruzadas y adelantos. Esto es una decisión de seguridad — RE2 garantiza coincidencia en tiempo lineal, lo que evita retroceso catastrófico. Si estás portando un patrón desde Python o JS a Go y usa adelantos o referencias cruzadas, necesitarás reorganizar la lógica.
Ejemplo del mundo real: Validación de correos electrónicos a través de idiomas
El mismo patrón, dos implementaciones: un validador de formularios en JavaScript y una verificación de entrada en Python.
// JavaScript — client-side form validation
const EMAIL_RE = /^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$/;
function validateEmail(input) {
const value = input.trim();
if (!EMAIL_RE.test(value)) {
throw new Error(`Invalid email address: ${value}`);
}
return value;
}
// Usage
document.querySelector('#signup-form').addEventListener('submit', (e) => {
e.preventDefault();
try {
const email = validateEmail(e.target.email.value);
submitForm({ email });
} catch (err) {
showError(err.message);
}
});
# Python — API request validation
import re
EMAIL_RE = re.compile(r'^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$')
def validate_email(value: str) -> str:
value = value.strip()
if not EMAIL_RE.match(value):
raise ValueError(f"Invalid email address: {value!r}")
return value
# Usage in a Flask route
@app.route('/signup', methods=['POST'])
def signup():
try:
email = validate_email(request.json.get('email', ''))
except ValueError as e:
return jsonify({'error': str(e)}), 400
# continue with valid email...
Ambos usan el mismo patrón subyacente. La única diferencia significativa es la de **Python**. re.compile() compila de antemano el patrón para que las llamadas repetidas no lo reparsen en cada invocación — vale la pena hacerlo en cualquier camino crítico.
Guarde un Resumen Rápido Personal
Los patrones superiores manejan los casos comunes, pero con el tiempo acumularás tus propios patrones — formatos de registro específicos para tu pila (stack), esquemas de identificadores de sistemas internos y formatos de fechas que tu equipo de datos insiste en usar. Una breve, curada archivo con patrones probados que puedes pegar es más valioso que memorizar las reglas sintácticas. Pruébalos una vez, anótalos con su propósito y refiérte a ellos en lugar de reconstruirlos desde cero cada vez.
تثبيت ملحقاتنا
أضف أدوات IO إلى متصفحك المفضل للوصول الفوري والبحث بشكل أسرع
恵 وصلت لوحة النتائج!
لوحة النتائج هي طريقة ممتعة لتتبع ألعابك، يتم تخزين جميع البيانات في متصفحك. المزيد من الميزات قريبا!
