正则是掩盖零件的URL



我有一些URL,例如

https//abc.domain-name.co
https//*.domain-name.co 
*//*.domain-name.co

在这里 *意味着可以有全部条件。例如

*//域>允许所有协议

我需要提取

的正则
  1. 协议
  2. 子域
  3. 主机名

所需的结果:

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

我不能使用URL(JS),因为需要有效的URL并添加 *使URL无效,这就是为什么需要将正语将URL解析为一系列字符串的原因。

据我了解您的要求,这些应该是捕获子域,域和协议的正则是:

  • 子域: //([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分为部分。因此,例如子域在//. (dot)之间捕获[a-z]+组。请注意,如果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]);

相关内容

  • 没有找到相关文章

最新更新