Javascript 正则表达式将URL转换为链接

Javascript 正则表达式将URL转换为链接,javascript,regex,Javascript,Regex,我从这个网站“借用”了一个正则表达式:这几乎完成了,但我想匹配example.com 我知道stackoverflow不是doyourHome.com,但我花了很长时间思考,却没有结果。这里有一个需要测试的小玩意儿:你可以在结尾看到example.com不是一个链接 var reg=/\b((?:[a-z][\w-]+:(?:\/*)|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+

我从这个网站“借用”了一个正则表达式:这几乎完成了,但我想匹配example.com 我知道stackoverflow不是doyourHome.com,但我花了很长时间思考,却没有结果。这里有一个需要测试的小玩意儿:你可以在结尾看到example.com不是一个链接

var reg=/\b((?:[a-z][\w-]+:(?:\/*)|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi;
var allurl="http:foo.com/blah_blah http://foo.com/blah_blah/ (Something like http://foo.com/blah_blah) http://foo.com/blah_blah_(wikipedia) http://foo.com/more_(than)_one_(parens) (Something like http://foo.com/blah_blah_(wikipedia)) http://foo.com/blah_(wikipedia)#cite-1 http://foo.com/blah_(wikipedia)_blah#cite-1 http://foo.com/unicode_(✪)_in_parens http://foo.com/(something)?after=parens http://foo.com/blah_blah. http://foo.com/blah_blah/. <http://foo.com/blah_blah> <http://foo.com/blah_blah/> http://foo.com/blah_blah, http://www.extinguishedscholar.com/wpglob/?p=364. http://✪df.ws/1234 rdar://1234 rdar:/1234 x-yojimbo-item://6303E4C1-6A6E-45A6-AB9D-3A908F59AE0E message://%3c330e7f840905021726r6a4ba78dkf1fd71420c1bf6ff@mail.gmail.com%3e http://➡.ws/䨹 www.c.ws/䨹 <tag>http://example.com</tag> Just a www.example.com link. http://example.com/something?with,commas,in,url, but not at end What about <mailto:gruber@daringfireball.net?subject=TEST> (including brokets). mailto:name@example.com bit.ly/foo “is.gd/foo/” WWW.EXAMPLE.COM http://www.asianewsphoto.com/(S(neugxif4twuizg551ywh3f55))/Web_ENG/View_DetailPhoto.aspx?PicId=752 http://www.asianewsphoto.com/(S(neugxif4twuizg551ywh3f55)) http://lcweb2.loc.gov/cgi-bin/query/h?pp/horyd:@field(NUMBER+@band(thc+5a46634)) 6:00p filename.txt http://example.com/quotes-are-“part” ✪df.ws/1234 example.com example.com/";
document.write(allurl.replace(reg,"<a href='$1' >$1</a><br />"));
请检查一下

var reg=/\b((?:[a-z][\w-]+:(?:\/*)|(?:www\d{0,3}[.])|[a-z0-9.\-]+[.][a-z]{2,4}\/{0,1})(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))*(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi;

适合你的需要。wwwanyNumber刚刚被设置为出现一次或零次。对于第一个答案,很抱歉,没有注意到文本。

在{2,4}\/之后添加一个替换运算符|,即

关于这件事,你应该了解一些事情。第一个未捕获的组:…,查找URL的指示符。例如,一个指标是www,后跟最多3位数字。然而,您需要的是一种在没有任何指示符的情况下识别URL的方法。因此,我们在上面所做的是添加了一个子句,或者一个空匹配项,作为有效的指示符。这样做的结果是,您的正则表达式现在的选择性降低了:所有类型的字符串,不仅是example.com,还有filename.txt、3.141593和omg……都被标识为URL!您唯一的另一个现成的选择是对后缀进行更多的选择,例如,需要特定的后缀com | org | net,但这会使原始正则表达式的通用性丧失,因为它根本没有指定任何后缀


换句话说,您可能面临的是逻辑上的限制,而不是正则表达式编写技能或正则表达式语言本身的限制。

请在问题中包含您的代码,以供将来参考。我已经更新了它,但是链接应该是次要的,如果这个链接被删除了怎么办…还有,你想做什么?如果这是家庭作业,你应该添加家庭作业标签。我只是说这不是家庭作业。我正在尝试更改正则表达式,以便example.com匹配+1。你的例子说明了为什么不应该添加这样的东西,IMO example.com不应该作为URL链接。如果OP希望将其链接为url,只需添加http://协议,如中所示http://example.com. 例如,如果在论坛板上实现这种自动URL识别,那么用户的帖子将有许多无意的链接,甚至可能是断开的链接。按照您的建议定义后缀可能是一种解决方法。
    var reg=/\b((?:[a-z][\w-]+:(?:\/*)|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/|)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/gi;