获取URL的部分(正则表达式)
鉴于URL(单行):
http://test.example.com/dir/subdir/file.html
我如何使用正则表达式提取以下部分:
即使输入以下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
进一步解析'其余'尽可能具体。 在一个正则表达式中这样做有点疯狂。
我意识到我迟到了,但是有一个简单的方法可以让浏览器为你解析一个没有正则表达式的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
*/
我晚了几年,但我很惊讶没有人提到统一资源标识符规范中有一节用正则表达式解析URI。 Berners-Lee等撰写的正则表达式是:
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(?([^#]*))?(#(.*))?
12 3 4 5 6 7 8 9
上面第二行的数字只是为了提高可读性; 他们指出每个子表达的参考点(即每个成对的括号)。 我们将与subexpression匹配的值称为$。 例如,将上述表达式匹配到
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
对于它的价值,我发现我必须避免JavaScript中的正斜杠:
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(?([^#]*))?(#(.*))?
上一篇: Getting parts of a URL (Regex)
下一篇: Make draggable element sortable within droppable using jQuery UI