0

我在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”之前禁止符号(双引号),以防止 html 元素(如<img>.

我正在编辑问题,因为符号<加上!在其后显示文本时出错。(那,也可能引发错误)。

4

2 回答 2

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>. 是一个现场小提琴。

请注意,此代码不适用于分层复杂的元素,因为.contents()只返回第一级子元素。如果合适,您可能需要使用更复杂的解决方案

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

于 2012-09-29T21:54:43.943 回答
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/加上后面的任何不是空格来识别 url。它不会抓住<img src="img.com" />..com"

如果您只有 .com 域,这将起作用,如果您有 .net、.org 等,那么您必须将它们添加为要检查的内容。

于 2012-09-29T20:46:47.787 回答