您可以更新我的正则表达式以符合下一个要求
仅与列表中的TopLevelDomains匹配
var srg = new RegExp(/(^|[\s])([\w\.]+\.(com|cc|net))/ig);
对于样本,必须匹配:
jsfiddle.net
jmitty.cc:8080/test3s.html
www.ru,sample.com,google.com/?l=en
very.secure.dotster.com/i?ewe
结果我需要
<a>jsfiddle.net</a>
<a>jmitty.cc:8080/test3s.html</a>
<a>www.ru</a>,<a>sample.com</a>,<a>google.com/?l=en</a>
<a>very.secure.dotster.com/i?ewe</a>
答案 0 :(得分:0)
好吧,我想你可以改变你的正则表达式中的一些小东西:
([\w\.]+\.(?:com|cc|net|ru)[^,\s]*)
替换为:
<a href="$1" target="_blank">$1</a>
我不确定你为什么一开始就有(^|[\s])
这对我来说似乎没用,所以我把它删除了。如果你有理由,你可以把它放回去。
我已根据您的要求将ru
添加到扩展名以匹配www.ru
,并添加[^,\s]*
以继续匹配,直到遇到逗号或空格。
您的更新小提琴是here。
答案 1 :(得分:0)
这是一个非常复杂的问题,没有完美的答案,但如果你不需要完美,请查看Jeff Roberson的Linkify页面和this post由Van Goyvaerts讨论Jeff Atwood的博客文章,“The网址问题“。
答案 2 :(得分:0)
/
(?:^|\b) # match word boundary or beginning of line
( # begin cpature
[\w.]+ # domain part
\.[a-z]{2,3} # domain suffix
(?:\:[0-9]{1,5})? # optional port
(?:\/.*)? # path details
) # end capture
(?:[,\s]|$) # comma, space or eol
/ig
一些细节:
[\w.]+
可能需要更多工作,具体取决于您归类为可接受的域名字符(我听说他们现在接受unicode字符?)[a-z]{2,3}
更改为可接受的顶级域名列表(例如(?:com|org|net|info|edu)
。在您的示例中,您只列出了com,cc&amp; net,但结果显示为{{1}如捕获的那样。www.ru
默认情况下是贪婪的,但是因为你想要查询信息应该没问题。哦,如果你想让你的链接可以点击(因为没有协议的链接不起作用):
(?:\/.*)?
演示here