嵌入图像并将文本转换为链接

时间:2014-01-05 09:15:04

标签: javascript html regex

我有两个正则表达式,每个表达式都可以找到http://www.google.com之类的网址或https://www.google.com/images/srpr/logo11w.png之类的图片链接。

这个网址可以找到http://www.google.com

等网址
/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig

此处查找带有https://www.google.com/images/srpr/logo11w.png

等图片扩展名的网址
/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])+\.(?:jpe?g|gif|png)/ig;

我有一个查看文字的功能,并将<a href="...">...</a><img src="...">替换为以下网址:

function replaceURLWithHTMLLinks(text) {
        var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
        var exp2 = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])+\.(?:jpe?g|gif|png)/ig;
        var links = text.replace(exp,"<a href='$1' target='_blank'>$1</a>");
        var images = links.replace(exp2, "<img src='$1' alt='$1'>");
        return images;
    }

问题是,如果我的文字包含图片网址,则会在第一次运行时找到该网址并将其替换为链接,然后替换第二部分中的部分链接,将其分解。

最好用这个小提琴解释:http://jsfiddle.net/BenedictLewis/m4H9B/2/

1 个答案:

答案 0 :(得分:0)

使用预测来查找周围的引号

var exp = /((https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])(?=([^"']*["'][^"']*["'])*[^"']*$)/ig;

示例:http://jsfiddle.net/S9TbH/1/