首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取URL的一部分(Regex)

获取URL的一部分(Regex)
EN

Stack Overflow用户
提问于 2008-08-26 19:01:37
回答 30查看 281.5K关注 0票数 142

给定URL (单行):

http://test.example.com/dir/subdir/file.html

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

测试子域(测试) (example.com)

  • The路径,不包含文件(/dir/subdir/)

  • The文件(file.html)

  • The路径,不包含文件(/dir/subdir/file.html)

  • (add任何其他您认为有用的(file.html)

  • The)

即使我输入以下URL,正则表达式也应该正常工作:

代码语言:javascript
复制
http://example.example.com/example/example/example.html
EN

回答 30

Stack Overflow用户

回答已采纳

发布于 2008-08-26 11:06:09

一个单一的正则表达式,用于解析和分解一个完整的

,包括查询参数和锚点。

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职位:

url: RegExp'$&',

协议:RegExp.$2,

主持人:RegExp。$3,

路径:RegExp.$4,

文件:RegExp.$6,

查询:RegExp.$7,

散列:RegExp。$8

然后您可以进一步解析主机(‘’)。分隔的)非常容易的。

I会做的事情是这样的:

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

进一步解析“其余部分”,使其尽可能具体。在一个正则表达式中完成它,嗯,有点疯狂。

票数 161
EN

Stack Overflow用户

发布于 2012-09-18 12:10:33

我知道我来晚了,但有一种简单的方法可以让浏览器在不使用正则表达式的情况下为您解析url:

代码语言:javascript
复制
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
*/
票数 86
EN

Stack Overflow用户

发布于 2014-11-06 04:22:51

我迟到了几年,但我很惊讶没有人提到统一资源标识符规范有一个section on parsing URIs with a regular expression。Berners-Lee等人编写的正则表达式是:

^((^:/?#+):)?(//(^/?#*))?(^?#*)(\?(^#*))?(#(.*))?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 = $7 = $8 =#相关$9 =相关

无论如何,我发现我必须转义JavaScript中的正斜杠:

^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

票数 85
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档