Evita las expresiones regulares lentas y el retroceso catastrófico (ReDoS) que puede paralizar un servicio.
La mayoría de las expresiones regulares son muy rápidas, pero ciertos patrones pueden ver crecer su tiempo de ejecución de forma exponencial según la longitud de la entrada. Esto se llama retroceso catastrófico, y al ataque que detiene un servidor con una entrada malintencionada se le llama ReDoS (denegación de servicio mediante expresiones regulares).
La causa más habitual son los cuantificadores anidados. Cuando una repetición se solapa con otra, como en (a+)+ o (.*)*, y la parte siguiente falla, el motor prueba todas las particiones posibles y se dispara. Una alternancia ambigua como (a|a)* provoca el mismo problema.
La clave de la prevención es eliminar la ambigüedad. Combina las repeticiones solapadas en una sola, acota el rango usando [^x]* en lugar de .*, y, si es posible, considera los grupos atómicos o los cuantificadores posesivos (que no existen en JavaScript). Limitar la longitud de la entrada también es eficaz en la práctica.
Como este probador se ejecuta en el navegador, un patrón peligroso solo hará que tu pestaña vaya un poco lenta durante un momento; pero antes de usar ese mismo patrón en un servidor con entradas no confiables, comprueba siempre su rendimiento.