Javascript链接自动嵌入与正则表达式

时间:2012-09-29 19:06:03

标签: javascript regex url

我在javascript中使用这个正则表达式有些麻烦。同样的正则表达式在PHP中有效,但在JavaScript中会出现这样的错误:“无效的正则表达式:(?”之后无法识别的字符。我的正则表达式为:

text = text.replace(/(?<!\=\")http([A-Za-z0-9:\/\.\+\?\%\@\!\#\&_-]+)/g,
    '<a href="http$1" target="_blank" rel="nofollow">http$1</a> ');

问题出在第一部分(?< !\=\"),但我不知道如何解决它,因为它是PHP或C的正常正则表达式。

这种结构有什么类似的吗?我需要在“http”之前禁止使用符号"(双引号),以防止像<img>这样的html元素中的网址替换。

我正在编辑问题,因为符号<!在显示文字后出错。 (也可能会调用错误)。

2 个答案:

答案 0 :(得分:3)

我建议不要使用正则表达式来解决这个问题。正则表达式不打算与XML一起使用,因此它们最终会失败。您可以使用以下命令来完成自动链接功能(jQuery):

$('#text').contents().filter(function() {
    return this.nodeType == 3;
}).each(function(i, t){
    $(t).replaceWith(t.nodeValue.replace(/(http:\/\/[\S]+)/g,
       '<a href="$1" target="_blank" rel="nofollow"><b>$1</b></a>'));
});

此正则表达式在文本节点上运行,因此您可以保证找不到像<img>这样的元素。 Here是一个活泼的小提琴。

请注意,此代码对于具有分层复杂元素的 as-is 不起作用,因为.contents()仅返回第一级子级。如果适合,您可能需要使用a more complex solution

然而,使用XML概念(节点,元素,文本节点)是解决问题的方式,因此您将拥有快速,有效且健壮的代码。

答案 1 :(得分:1)

在上面的示例中(包括添加):

var text = 'something bla bla bla like this domain.com/blabla/bla.php or more. <img src="img.com" />'

这对你有用:

var newText = text.replace(/([^ ]*\.com\/[^ ]*)/g,'<a href="http://$1"; target="_blank" rel="nofollow">$1</a>');

输出:

something bla bla bla like this <a href="http://domain.com/blabla/bla.php"; target="_blank" rel="nofollow">domain.com/blabla/bla.php</a> or more. <a img src="img.com" />

基本上,它通过.com/前面的任何空格以及之后的任何空格来识别网址。它不会抓取<img src="img.com" />,因为它是.com"

如果您只有.com域名,这将有效,如果您有.net,.org等等,那么您必须将这些作为要检查的内容添加。