我在文本中找到了很多检测网址的答案。我尝试过但未能检测到协议可选网址。大多数现有的解决方案都可以在" 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等案例。但我不知道如何更改它以支持协议缺席案例。
答案 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.