#javascript #html
Вопрос:
В настоящее время я создаю функцию для системы обмена сообщениями, которая определяет URL-адрес из строки и добавляет anchor
к нему тег. Но мне нужно исключить URL-адреса, указывающие на изображения и документы. Созданная мной функция теперь обнаруживает все URL-адреса и добавляет anchor
к ним тег, но она также добавляет тег привязки к изображениям и документам.
я попробовал эти регулярные выражения, но желаемого результата не получил
/(.[^>"]|[^=]")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'));
Комментарии:
1. Ты сказал, что хочешь
exclude the urls that points to images and documents
этого . Как вы планируете определить, на что указывает URL-адрес? В отличие от имен локальных файлов, URL-адреса не обязательно следуют каким-либо шаблонам именования. Вы не можете ожидать, что все URL-адреса, заканчивающиеся на «.jpg», будут указывать на изображения, точно так же, как вы не можете ожидать, что URL-адреса, заканчивающиеся чем-то другим, НЕ будут указывать на изображение. Единственный известный мне способ определить тип ресурса за URL-адресом-это получить его тип mime с помощью прямого запроса.2. @HubertGrzeskowiak я просто хочу удалить png,gif,jpg,pdf и docx
3. Наше любопытство, помимо обнаружения типа файлов, почему бы вам не связать изображения и документы?
Ответ №1:
Добавьте отрицательный внешний вид в свое регулярное выражение. Это (?!) группа, и это означает совпадение до тех пор, пока за тем, что происходит раньше, ничего не следует в заголовке. Затем добавьте проверку, чтобы проверить текст с помощью этого анализатора, и вернитесь из функции, если тест завершится неудачно.
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=xamp;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'));