首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取URL和路径不同部分的正则表达式

提取URL和路径不同部分的正则表达式
EN

Stack Overflow用户
提问于 2021-05-27 06:21:17
回答 1查看 456关注 0票数 1

考虑一下URL,如

代码语言:javascript
复制
https://stackoverflow.com/v1/summary/1243PQ/details/P1/9981
http://stackoverflow.com/v2/summary/saas?test=123

我需要一个正则表达式来匹配这些URL并将它们转换为

代码语言:javascript
复制
stackoverflow.com:v1:summary:1243PQ:details:P1:9981
stackoverflow.com:v2:summary:saas

我需要使用regex构建一个规则,在这里我可以使用$1$2等提取路径,而无需使用任何javascript逻辑,因为我需要在分类规则生成器工具中使用它。我尝试过这个URL包含^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?,并提取了返回stackoverflow.com:v1/summary/1243PQ/details/P1/9981$4:$5

但是,这是不正确的。有人能帮我找出正确的标准吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-27 07:51:04

你可以试试这个:

正则表达式

代码语言:javascript
复制
/(?:https?:\/\/([^\/?\s#]+))?\/([^\/?\s#]*)(?:[\?#].*)?/g

替换

代码语言:javascript
复制
$1:$2
代码语言:javascript
复制
(?:                     non-capturing group
    https?:\/\/         "http://" or "https://"
    ([^\/?\s#]+)        capture the domain and put it in group 1
)?                      make this capture optional
\/                      "/"
([^\/?\s#]*)            one segment of the url path, capture it in group 2
(?:[\?#].*)?            an optional non-capturing group for consuming query string or # anchor at the end

检查测试用例

更新

如果不能使用g标志进行替换,那么没有其他更好的方法,只能野蛮地执行所有组合:

您需要为url路径的每个段添加一个\/([^\/?#\s]+):$2等:

  • https://stackoverflow.com
代码语言:javascript
复制
^https?:\/\/(?:www\.)?([^\/?#\s]+)\/?(?:[#?].*)?$
代码语言:javascript
复制
$1
  • https://stackoverflow.com/path1
代码语言:javascript
复制
^https?:\/\/(?:www\.)?([^\/?#\s]+)\/([^\/?#\s]+)\/?(?:[#?].*)?$
代码语言:javascript
复制
$1:$2
  • https://stackoverflow.com/path1/path2
代码语言:javascript
复制
^https?:\/\/(?:www\.)?([^\/?#\s]+)\/([^\/?#\s]+)\/([^\/?#\s]+)\/?(?:[#?].*)?$
代码语言:javascript
复制
$1:$2:$3
  • https://stackoverflow.com/path1/path2/path3
代码语言:javascript
复制
^https?:\/\/(?:www\.)?([^\/?#\s]+)\/([^\/?#\s]+)\/([^\/?#\s]+)\/([^\/?#\s]+)\/?(?:[#?].*)?$
代码语言:javascript
复制
$1:$2:$3:$4
  • https://stackoverflow.com/path1/path2/path3/path4
代码语言:javascript
复制
^https?:\/\/(?:www\.)?([^\/?#\s]+)\/([^\/?#\s]+)\/([^\/?#\s]+)\/([^\/?#\s]+)\/([^\/?#\s]+)\/?(?:[#?].*)?$
代码语言:javascript
复制
$1:$2:$3:$4:$5
  • https://stackoverflow.com/path1/path2/path3/path4/path5
代码语言:javascript
复制
^https?:\/\/(?:www\.)?([^\/?#\s]+)\/([^\/?#\s]+)\/([^\/?#\s]+)\/([^\/?#\s]+)\/([^\/?#\s]+)\/([^\/?#\s]+)\/?(?:[#?].*)?$
代码语言:javascript
复制
$1:$2:$3:$4:$5:$6
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67716688

复制
相关文章

相似问题

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