使用Javascript检测文本中的协议可选URL

时间:2014-05-06 02:22:46

标签: javascript regex

我在文本中找到了很多检测网址的答案。我尝试过但未能检测到协议可选网址。大多数现有的解决方案都可以在" Hello,open http://somesite.com/etc中查找我的照片"并将http部分替换为标签。但是他们不能用于像#34;嘿,打开somesite.com或somesite.com/etc来看一看。"

如何检测这两种情况(一个正则表达式更好),默认协议是" http://"对于无协议网址。

我注意到SO也未能发现后一种情况......

编辑: 也许将somesite.com更改为url(英文版)很容易出错,所以这个要求不理想?

我使用了正则表达式/(https?:// [^ \ s] +)/ g。这个很简单,支持http://abcd.com/etc/?v=3&type=xyz等案例。但我不知道如何更改它以支持协议缺席案例。

2 个答案:

答案 0 :(得分:1)

您可以使用:

^(https?:\/\/)?\w+\.\w+([\/\w\?\-\+\!\&\$\=\.\:]+)*$

匹配

www.domain.com
http://www.domain.com
http://www.somesite.com/etc
http://www.somesite.com/etc/etc/etc
somesite.com
somesite.com/etc

http://google.com/q=regex+for+this&utm-source=stackoverflow

<强> DEMO

答案 1 :(得分:1)

这不是防弹,但它适用于您提供的示例:

var text = "Hey, open some-site.com or somesite.com/etc?test=1 to take a look."
var myregexp = /([\-A-Z0-9+&@#\/%=~_|]+\.[a-z]{2,7})(\/[\-A-Z0-9+&@#\/%=~_|?]+)?/ig;
var result = text.replace(myregexp, '<a href="http://$1$2">$1$2</a>');
alert(result);

//Hey, open <a href="http://some-site.com">some-site.com</a> or <a href="http://somesite.com/etc?test=1">somesite.com/etc?test=1</a> to take a look.

LIVE DEMO