在我自己这样做之前,我想我会在这里询问是否有任何快速解决方案。
我不需要Chrome的omnibar的历史查找,自动完成或其他花哨的功能;我只需要检测字符串看起来是否像有效的URL(具有有效的TLD和方案/协议)或IP地址(IPV4和IPV6)。
我不确定如何搜索chrome的代码存储库以了解它们是如何做到的。所以,如果你能找到对我来说这是一个可以接受的答案(如果你将它移植到javascript则可获得奖励积分!)。
标记为与语言无关,因为我不关心它是什么语言[好吧,请不要Ook或LOLCODE])。不过,Javascript将是最终的实现。
答案 0 :(得分:4)
RFC2396 - Uniform Resource Identifiers (URI): Generic Syntax中提供了一个正则表达式(参见附录B):
以下行是常规 用于分解URI的表达式 参考其组成部分。
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 12 3 4 5 6 7 8 9
第二行中的数字 以上只是为了提高可读性; 他们指出了参考点 每个子表达(即每个子表达) 配对括号)。我们指的是 值与子表达式匹配 作为$。例如,匹配 上面的表达
http://www.ics.uci.edu/pub/ietf/uri/#Related
导致以下结果 子表达式匹配:
$1 = http: $2 = http $3 = //www.ics.uci.edu $4 = www.ics.uci.edu $5 = /pub/ietf/uri/ $6 = <undefined> $7 = <undefined> $8 = #Related $9 = Related
在这种情况下,我没有理由不使用正则表达式,特别是如果您只是检查它是URI还是搜索。