javascript - 正则表达式将 URL 转换为部分
问题描述
我有几个网址,例如
https//abc.domain-name.co
https//*.domain-name.co
*//*.domain-name.co
这里 * 表示可以有包罗万象的条件。例如
*//.domains > 允许的所有协议
我需要一个正则表达式来提取
- 协议
- 领域
- 子域
- 主机名
要求的结果:
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 划分为多个部分。因此,例如 subdomain 捕获 和之间的[a-z]+
组。请注意,如果 URL 没有任何子域,则第一个正则表达式会捕获整个域。//
. (dot)
编辑(更好的解决方案)
正如@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]);
推荐阅读
- python-3.x - 如何在Python中的List中的String值中获取特定字符串
- neo4j - Neo4j 随机关系
- sql - 如何获取唯一值来比较同一张表的两列?
- c# - 证书未通过 c# http 请求发送
- gradle - 随着 JDA 4.2.0 的新更新,VPS 上新构建的 JAR 文件返回 NoClassDefFoundError
- vb.net - 使用后台 Worker VB.Net 运行 Dos 程序
- php - 试图获取非对象错误PHP curl的属性
- html - 为什么我的 .service:nth-child(1) is not 不工作?
- c++ - C++ 将源文件中的某些函数设为私有的最佳方法是什么?
- android - 警报管理器设置了一个额外的警报