正则表达式将URL转换为部分[关闭]

问题描述 投票:-2回答:1

我有几个网址

https//abc.domain-name.co

https//*.domain-name.co 

*//*.domain-name.co

这里*意味着可以满足所有条件。例如

* //。domains>允许的所有协议

我需要一个正则表达式来提取

  1. 协议
  2. 子域
  3. 主机名

要求结果:

for : *//posts.com

 "protocol": "*",
 "hostname": "posts.com",

for *//*.posts.com
  protocol: '*',
  hostname: '*.posts.com',

我不能使用URL(js)因为需要有效的Url并且添加*会使url无效,这就是为什么需要正则表达式来将url解析为字符串数组的原因。

javascript regex
1个回答
1
投票

据我了解你所问的,这些应该是捕获子域,域和协议的正则表达式:

  • 子域名:\/\/([a-z]+)\.
  • 域名:\:\/\/[a-z]+\.(.*)\.
  • 议定书:([a-z]+)\:\/\/

因此,如果我们测试以下代码:

var str = "https://abc.domain-name.co";

var patt_subdomain = /\/\/([a-z]+)\./i;
var patt_protocol = /([a-z]+)\:\/\//i;
var patt_domain = /\:\/\/[a-z]+\.(.*)/i;

var subdomain = str.match(patt_subdomain);
var protocol = str.match(patt_protocol);
var domain = str.match(patt_domain);


console.log("Subdomain: " + subdomain[1]);
console.log("Protocol: " + protocol[1]);
console.log("Domain: " + domain[1]);

这是输出:

Subdomain: abc
Protocol: https
Domain: domain-name.co

它基本上是基于://在任何URL中都是常量的事实,而. (dot)将URL划分为多个部分。因此,例如子域捕获[a-z]+//之间的. (dot)组。请注意,如果URL没有任何子域,则第一个正则表达式会捕获整个域。

编辑(更好的解决方案)

正如@Rup在评论中提到的,这是一个单一的正则表达式解决方案:

var str = "https://abc.domain-name.co";

var patt = /(.*)\:\/\/([a-z]+)\.(.*)/i;

var result = str.match(patt);


console.log("Subdomain: " + result[2]);
console.log("Protocol: " + result[1]);
console.log("Domain: " + result[3]);
© www.soinside.com 2019 - 2024. All rights reserved.