获取URL的部分(Regex)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

给定URL(单行):http : //test.example.com/dir/subdir/file.html

我如何使用正则表达式提取以下部分:

  1. 子域(测试)
  2. 域(example.com)
  3. 没有文件的路径(/ dir / subdir /)
  4. 该文件(file.html)
  5. 文件路径(/dir/subdir/file.html)
  6. 没有路径的网址(http://test.example.com
  7. (添加其他你认为会有用的东西)

即使输入以下URL,正则表达式也应该正常工作:http : //example.example.com/example/example/example.html

谢谢。

提问于
用户回答回答于

一个正则表达式来解析和分解完整的URL,包括查询参数和锚点,例如 https://www.google.com/dir/1/2/search.html?arg=0-a&arg1=1-b&arg3-c#hash ^((http[s]?|ftp):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$ RexEx职位: 网址:RegExp ['$&'], 协议:正则表达式$ 2, 主持人:正则表达式$ 3 路径:正则表达式$ 4 文件:正则表达式$ 6 查询:正则表达式$ 7, 哈希:正则表达式$ 8

那么你可以很容易地进一步解析主机('。'分隔)。

什么会做的是使用这样的:

/*
    ^(.*:)//([A-Za-z0-9\-\.]+)(:[0-9]+)?(.*)$
*/
proto $1
host $2
port $3
the-rest $4

进一步解析'其余'尽可能具体。在一个正则表达式中这样做有点疯狂。

用户回答回答于

有一种简单的方法可以让浏览器不用regex为你解析url:

var a = document.createElement('a');
a.href = 'http://www.example.com:123/foo/bar.html?fox=trot#foo';

['href','protocol','host','hostname','port','pathname','search','hash'].forEach(function(k) {
    console.log(k+':', a[k]);
});

/*//Output:
href: http://www.example.com:123/foo/bar.html?fox=trot#foo
protocol: http:
host: www.example.com:123
hostname: www.example.com
port: 123
pathname: /foo/bar.html
search: ?fox=trot
hash: #foo
*/

扫码关注云+社区