正则表达式检测没有www和http的网址

时间:2013-08-23 16:44:09

标签: javascript regex

您可以更新我的正则表达式以符合下一个要求

  • 必须与没有www和http
  • 的网址匹配
  • 如果查询包含 - 匹配
  • 当空格或逗号(,)或字符串结束符合
  • 时,Url结束
  • 仅与列表中的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>

小提琴http://jsfiddle.net/tYnU7/

3 个答案:

答案 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默认情况下是贪婪的,但是因为你想要查询信息应该没问题。

fiddle

哦,如果你想让你的链接可以点击(因为没有协议的链接不起作用):

(?:\/.*)?

演示here