Actualmente estoy creando una función para un sistema de mensajería que detecta una URL de la cadena y le agrega una etiqueta de anchor . Pero necesito excluir las URL que apuntan a imágenes y documentos. La función que creé ahora detecta todas las direcciones URL y le agrega etiquetas de anchor , pero también agrega etiquetas de anclaje a imágenes y documentos.
Intenté estas expresiones regulares pero no tuve el resultado deseado.
/(.[^>"]|[^=]")\b(https?|ftp|file)/gi /(https?:\/\/[^\s]+)/g function urlParsing(text) { var urlRegex = /(https?:\/\/[^\s]+)/g; return text.replace(urlRegex, function(url) { return '<a href="' + url + '">' + url + '</a>'; }) } console.log(urlParsing('Hello john https://stackoverflow.com')); console.log(urlParsing('Hello john https://picsum.photos/200/300.jpg'));Agregue una anticipación negativa a su expresión regular. Este es el (?!) grupo, y significa coincidencia siempre que lo que viene antes no sea seguido por nada en el futuro. Luego agregue una verificación para probar el texto contra ese analizador y regrese de la función si la prueba falla.
function urlParsing(text) { var urlRegex = /(https?:\/\/(?!.*\.(jpg|png|gif|pdf|docx))[^\s]+)/g; if(!urlRegex.test(text)) {return false}; return text.replace(urlRegex, function(url) { return '<a href="' + url + '">' + url + '</a>'; }) } console.log(urlParsing('Hello john https://stackoverflow.com')); console.log(urlParsing('Hello john https://pbs.org')); console.log(urlParsing('Hello john https://picsum.photos/200/300.jpg')); console.log(urlParsing('Hello john https://picsum.photos/200/300.jpg?arg=x&arg2=y')); console.log(urlParsing('Hello john https://picsum.photos/200/300.png')); console.log(urlParsing('Hello john https://picsum.photos/200/300.gif')); console.log(urlParsing('Hello john https://picsum.photos/200/300.pdf')); console.log(urlParsing('Hello john https://picsum.photos/200/300.docx'));