Haz que las expresiones regulares sean probables y comprensibles
Haz que las expresiones regulares sean probables y comprensiblesTL;DR: Puede descomponer un complejo regex de validación en partes más pequeñas para probar cada parte individualmente y informar errores precisos.
TL;DR: Puede descomponer un complejo regex de validación en partes más pequeñas para probar cada parte individualmente y informar errores precisos.
Problemas resueltos
- Hard-to-test expresiones regulares Unclear error reporting
- Debugging nightmares
- Maintenance challenges
- Too Longas líneas y métodos
- Unmaintainable expresiones a href="https://hackernoon.com/how-to-solinky-the-stinky
- Hard-to-test expresiones regulares expresiones habituales
- Informe de errores no claros
- Debugging pesadillas
- Desafíos de mantenimiento
- Too long líneas y métodos longas líneas y métodos
- Expresiones insoportables
- Primitivo Obsesión Primitivo Obsesión
- Aislamiento de error
- Silos de conocimiento
- Comentarios desactualizados Comentarios desactualizados
- Errores sin empatía para usuarios finales Errores sin empatía
- Analizar el regex para identificar sus componentes lógicos.
- Destruye el regex en subpatrones más pequeños, nombrados para cada componente.
- Escribe testes de unidades para cada subpatrón para asegurarse de que funciona correctamente.
- Combine los subpatrones probados en la lógica de validación completa.
- Refactor el código para proporcionar mensajes de error claros para cada parte que falla.
- Analizar el regex para identificar sus componentes lógicos.
- Destruye el regex en subpatrones más pequeños, nombrados para cada componente.
- Escriba testes de unidades para cada sub-pattern para asegurarse de que funcione correctamente. expresiones de la unidad
- Combine los subpatrones probados en la lógica de validación completa.
- Refactor del código para proporcionar mensajes de error claros para cada parte que falla.
- [x]Semi-automático
- [x]Semi-automático [x]
- Testabilidad
- Testabilidad
Nivel
- [x]Intermedio
- [x]Intermedio [x]
Relacionados Código Olor
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxvhttps://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evdhttps://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evdhttps://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxvii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxviihttps://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xx-we-have-reached-100
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xx-we-have-reached-100https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-ix-7rr33ol
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-ix-7rr33olPasos
Código de muestra
Antes
función validateURL(url) { const urlRegex = /^(https?:\/\//)([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(\/.*)?$/; // Criptic and untesteable return urlRegex.test(url); }
función validateURL(url) { const urlRegex = /^(https?:\/\//)([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(\/.*)?$/; // Criptic and untesteable return urlRegex.test(url); }
Después de 👉
«Invalidado» de «Invalidado» de «Invalidado» de «Invalidado» de «Invalidado» de «Invalidado» de «Invalidado» de «Invalidado» de «Invalidado» de «Invalidado» de «Invalidado» de «Invalidado» de «Invalidado de «Invalidado» de «Invalidado de «Invalidado» de «Invalidado de «Invalidado de «Invalidado de» de «Invalidado de «Invalidado de»» de «Invalidado de «Invalidado de» de «Invalidado de» de «Invalidado de» de «Invalidado de» de «Invalidado de» de «Invalidado de»"Invalididad de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de la base de datos de datos de la base de datos de datos de la base de datos de datos de la base de datos de datos de la base de datos de datos de la base de datos de datos de la base de datos de datos de la base de datos de datos de datos de la base de datosTipo
Seguridad ️
Este refactoring es seguro si sigue los pasos cuidadosamente.
Testando cada componente se asegura de detectar los errores temprano.
¿Por qué el código es mejor? ✨
El código refactorizado es mejor porque mejora la legibilidad, el mantenimiento y la probabilidad.
Descomponer el regex en partes más pequeñas facilita la comprensión de lo que cada parte hace.
También puede informar errores específicos cuando la validación falla, lo que ayuda a los usuarios a corregir su entrada.
Esta es también una gran oportunidad para aplicar la técnica Test-Driven Development, aumentando gradualmente la complejidad mediante la introducción de nuevas subpartes.
Test-Driven Desarrollo¿Cómo mejora la bijeción? ️
Al descomponer el regex en componentes más pequeños y significativos, se crea un mapeo más cercano entre los requisitos Real-World (por ejemplo, "el URL debe tener un protocolo válido") y el código.
Real-WorldEsto reduce la ambigüedad y asegura que el código refleje el dominio del problema con precisión.
Limitaciones ⚠️
Este enfoque podría añadir algo de sobrecarga para patrones de regex muy simples donde romperlos sería innecesario.
Refactor con AI
Puede utilizar herramientas de IA para ayudar a identificar componentes de regex.
Pídele a la IA que explique lo que hace cada parte del regex, luego lo guíe en descomponerlo en piezas más pequeñas y probables.Por ejemplo, puede preguntar, "¿Qué hace este regex?" y seguir con, "¿Cómo puedo dividirlo en partes más pequeñas?".
Es 2025, Ningún programador debe escribir nuevo Expresiones regulares ya.
Expresiones habitualesDebería dejar esta tarea mecánica a la IA.
Suggested Prompt: 1. Analizar el regex para identificar sus componentes lógicos.2. Dividir el regex en subpatrones más pequeños, nombrados para cada componente.3. Escribir pruebas unitarias para cada subpatrón para asegurarse de que funciona correctamente.4. Combinar los subpatrones probados en la lógica de validación completa.5.Refactor el código para proporcionar mensajes de error claros para cada parte que falla.
Suggested Prompt: 1.- Analizar el regex para identificar sus componentes lógicos.2.- Dividir el regex en subpatrones más pequeños, nombrados para cada componente.3.- Escribir pruebas de unidad para cada subpatrón para asegurarse de que funciona correctamente.4.- Combinar los subpatrones probados en la lógica de validación completa.5.- Refactor el código para proporcionar mensajes de error claros para cada parte que falla.
A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A AA A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A ASin instrucciones apropiadas
Con instrucciones específicas
Sin instrucciones adecuadas
Sin instrucciones apropiadas
Con instrucciones específicas
Con instrucciones específicas
a href="https://www.perplexity.ai/?q=Correct+and+explain+this+code%3A+%60%60Javascript%0Durl%029Afunction+validateURL%28url%29+%7B%2D%5C%5Ba-Az-Z%5D%7D%2D%2F%2F%2F%3F%3A%5F%2F%2F%2C%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B+B
Tags ️
Refactorías relacionadas
Ver también
Créditos 🙏
Imagen de Gerd Altmann en Pixabay
Gerd AltmannPixabay«RR»Este artículo forma parte de la serie Refactoring.