Сопоставьте URL-адреса из строки, но исключите URL-адреса изображений и URL-адреса документов

#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'));