JavaScript正则表达式:非图片文件扩展名的URL

3
我有以下 JavaScript 代码,它可以将 URL 匹配并替换为 HTML 链接,但我需要它排除以 .png|.jpg|.jpeg|.gif 结尾的 URL。
text = text.replace(
            /(\b(?:https?|ftp):\/\/[a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|])/gim,
            '<a href="$1" class="autolink" target="_blank">$1</a>'
        );
1个回答

4

在进行以下测试之前:

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

谢谢你的回答,对于单个URL输入,这样的方法可以工作,但是我的输入字符串中可能有多个URL。无论如何还是感谢你。 - Jase Whatson
你可以使用自定义替换函数,检查匹配的字符串,将其与图像正则表达式进行比较,然后决定是保持不变(用自身替换)还是链接化。如果这是通用的链接化代码,并且你想避免 <img src=xxx"> 链接,那么你可能也需要避免各种其他东西(如 <script src=xxx"> 和 <a href="xxx">)。 - jfriend00
我添加了一个自定义替换函数的示例。 - jfriend00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接