实施像Google Chrome一样的“omnibar”...需要确定查询或URL的方法

时间:2011-01-21 16:14:42

标签: javascript language-agnostic

在我自己这样做之前,我想我会在这里询问是否有任何快速解决方案。

我不需要Chrome的omnibar的历史查找,自动完成或其他花哨的功能;我只需要检测字符串看起来是否像有效的URL(具有有效的TLD和方案/协议)或IP地址(IPV4和IPV6)。

我不确定如何搜索chrome的代码存储库以了解它们是如何做到的。所以,如果你能找到对我来说这是一个可以接受的答案(如果你将它移植到javascript则可获得奖励积分!)。

标记为与语言无关,因为我不关心它是什么语言[好吧,请不要OokLOLCODE])。不过,Javascript将是最终的实现。

1 个答案:

答案 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还是搜索。