Tengo el siguiente código Regex que tarda mucho (más de 30 segundos) en validar direcciones URL grandes:
let validReg = new RegExp('^(https?:\\/\\/)?'+ // protocol '((([az\\d]([az\\d-]*[az\\d])*)\\.)+[az]{2,}|'+ // domain name '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address '(\\:\\d+)?(\\/[-az\\d%_.~+]*)*'+ // port and path '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string '(\\#[-az\\d_]*)?$','i'); let isValid = validReg.test(component.repository_url);¿Cómo puedo cambiar este código para validar el mismo Regex de manera más eficiente?
Debe refactorizar la parte en la que coincide con caracteres de palabras separados por guiones: [az\\d]([az\\d-]*[az\\d])* => [az\\d]+(?:-+[az\\d]+)* .
Además, tenga en cuenta que no necesita escapar / caracteres, no son metacaracteres especiales de expresiones regulares, y no está utilizando un literal de expresiones regulares.
Puedes utilizar
let validReg = new RegExp('^(https?://)?'+ // protocol '((([az\\d]+(?:-+[az\\d]+)*)\\.)+[az]{2,}|'+ // domain name '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address '(:\\d+)?(/[-az\\d%_.~+]*)*'+ // port and path '(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string '(#[-az\\d_]*)?$','i'); let isValid = validReg.test(component.repository_url);