URL-адреса регулярных выражений Javascript, которые не являются расширениями изображения

У меня есть следующий JavaScript, который соответствует и заменяет URL-адреса ссылками html, однако мне нужно это, чтобы исключить URL-адреса, которые заканчиваются на .png|.jpg|.jpeg|.gif

text = text.replace(
            /(\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|])/gim,
            '<a href="$1" class="autolink" target="_blank">$1</a>'
        );

person Jase Whatson    schedule 29.09.2011    source источник


Ответы (1)


Вы могли бы просто проверить перед:

if (!text.match(/\.(png|jpg|jpeg|gif)$/) {
    text = text.replace(
            /(\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|])/gim,
            '<a href="$1" class="autolink" target="_blank">$1</a>'
        );
}

Если вам нужно сделать несколько замен, вы можете использовать пользовательскую функцию замены, которая проверяет совпадение с окончаниями изображения и действует соответствующим образом. Это будет работать так:

var imageRegex = /\.(png|jpg|jpeg|gif)$/;
text = text.replace(/(\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|])/gim, 
    function(str) {
        if (str.match(imageRegex)) {
            return(str);
        } else {
            return('<a href="' + str + '" class="autolink" target="_blank">' + str + '</a>');
        }
    });
person jfriend00    schedule 29.09.2011
comment
Спасибо за ответ, что-то вроде этого будет работать для ввода с одним URL-адресом, однако мой ввод может содержать много URL-адресов в строке. Спасибо в любом случае - person Jase Whatson; 29.09.2011
comment
Вы можете использовать пользовательскую функцию замены, которая проверяет совпадающую строку, сравнивает ее с регулярным выражением изображения, а затем решает, оставить ли ее в покое (заменить самой собой) или связать ее. Если предполагается, что это код общего назначения, и вы пытаетесь избежать ссылок ‹img src=xxx›, то вам, вероятно, также следует избегать множества других вещей (например, ‹script src=xxx› и ‹a href =xxx›). - person jfriend00; 29.09.2011
comment
Я добавил пример пользовательской функции замены. - person jfriend00; 29.09.2011