En nuestra aplicación tenemos temas que el usuario puede crear, y cada tema debe tener su propio hashtag (o jerarquía de hashtags). Tenemos este tipo de expresiones regulares para la validación:
const REGEX_HASHTAG = /^(#[w]?((\/?)([a-z0-9]+)+)+)(,\s{0,1}#[a-z0-9]?((\/?)([a-z0-9]+)+)+)*$/g;Lo que necesito es que el usuario pueda crear hashtags que tengan una estructura como esta:
Y también los usuarios pueden poner comas (y espacios en blanco opcionales) seguidos de un nuevo hashtag o jerarquía de hashtag. Cuando pongo demasiadas letras y hago una barra al final, Regex deja de funcionar, tarda demasiado en ejecutarse. ¿Qué estoy haciendo mal?
regexr.com/6hpqo
Hay bastantes cuantificadores anidados y partes opcionales, que pueden causar retrocesos catastróficos cuando no hay coincidencia.
Podrías escribir el patrón como
^#[a-z0-9]+(?:\/[a-z0-9]+)*(?:,\s*#[a-z0-9]+(?:\/[a-z0-9]+)*)*$^ Comienzo de cadena#[a-z0-9]+ Match # y 1+ repeticiones de los caracteres enumerados en la clase de caracteres(?:\/[a-z0-9]+)* Opcionalmente repetir / y la misma clase de carácter(?: grupo de no captura,\s* Coincide con una coma y caracteres de espacio en blanco opcionales#[a-z0-9]+(?:\/[a-z0-9]+)* El mismo patrón que en la primera parte)* Cerrar el grupo de no captura y opcionalmente repetirlo$ Fin de la cadena