使用javascript Regex自动链接网址

时间:2015-04-20 12:21:19

标签: javascript jquery html regex

我有一段文字可能包含一些明文链接,或一些实际上链接的链接。

例如:

Posting a link: http://test.com, posting an image <img src="http://test.com/2.jpg" />. Posting an actual A tag: <a href="http://test.com/test.html">http://test.com/test.html</a>

我需要从这段文字中删除未格式化的链接。所以任何正则表达式将匹配第一种情况,但不是第二种或第三种情况,因为它们已经是格式良好的链接。

我设法剔除了这个正则表达式的所有链接:((http:|https:)\/\/[a-zA-Z0-9&#=.\/\-?_]+)但是,我仍然无法区分这些案例。

这需要在javascript中,所以我不认为允许负面的背后隐藏。

任何帮助都将不胜感激。

编辑:我试图将未经过格式化的链接包装在标签中。

1 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式获取标记之外的网址:

(?![^<]*>|[^<>]*<\/)((http:|https:)\/\/[a-zA-Z0-9&#=.\/\-?_]+)

请参阅demo

我们也可以使用i选项缩短它:

(?![^<]*>|[^<>]*<\/)((https?:)\/\/[a-z0-9&#=.\/\-?_]+)

请参阅another demo

示例代码:

&#13;
&#13;
var re = /(?![^<]*>|[^<>]*<\/)((https?:)\/\/[a-z0-9&#=.\/\-?_]+)/gi; 
var str = 'Posting a link: http://test.com, posting an image <img src="http://test.com/2.jpg" />. Posting an actual A tag: <a href="http://test.com/test.html">http://test.com/test.html</a>';
var val = re.exec(str);
document.getElementById("res").innerHTML = "<b>URL Found</b>: " + val[1];
var subst = '<a href="$1">$1</a>'; 
var result = str.replace(re, subst);
document.getElementById("res").innerHTML += "<br><b>Replacement Result</b>: " + result;
&#13;
<div id="res"/>
&#13;
&#13;
&#13;

<强>更新

要允许捕获特定标记内部,您可以将它们列入白名单like this

var re = /(?![^<]*>|[^<>]*<\/(?!(?:p|pre)>))((https?:)\/\/[a-z0-9&#=.\/\-?_]+)/gi;