javascript - 仅来自“sub.domain.com” JS 的正则表达式“域”
问题描述
我使用此规则来获取唯一的主机名,但它不适用于超过 2 个字符的子域。应该是什么else if
时候return hostname[1]
,我试过了,但还是第一次if
运行。我愿意接受正确的正则表达式或替代解决方案。
效劳于:
www.google.com => 谷歌
en.store.com => 商店
google.com => 谷歌
www2.site.com => 网站
www.google.com.tr => 谷歌
https://google.com.tr => 谷歌
shop.store.com => 商店(应该是商店)
代码
var match = url.match(/:\/\/(www[0-9]?\.|[a-zA-Z]\.)?(.[^/:]+)/i);
if (match != null && match.length > 2 && typeof match[2] === 'string' && match[2].length > 0) {
var hostname = match[2].split(".");
return hostname[0];
}
else {
return null;
}
解决方案
尽管它可以解决您的问题,但它不是必需的正则表达式解决方案。
const list = ['www.google.com',
'en.store.com',
'google.com',
'www2.site.com',
'www.google.com.tr',
'https://www.google.com.tr',
'shop.store.com'
];
function getName(url) {
const parts = url.split('.');
return parts[parts.length - (parts.length > 3 ? 3 : 2 )];
}
list.forEach((item) => {
console.log(item,getName(item)) ;
});
推荐阅读
- swift - 参数标签 '(of:, with:)' 不匹配任何可用的重载
- tensorflow - 安装 tensorflow 后可以删除 gcc 编译器吗?
- google-bigquery - 在 BigQuery 中展平表
- django - 如何创建将登录用户添加到函数的装饰器?
- javascript - 如何获取块中的元素?
- flutter - Dio 的 get 请求返回不完整的数据
- laravel - 从存储中返回图像响应以及其他数据?
- node.js - 第二次选择中的选项取决于第一次选择中的选定选项
- php - 当我使用 queue:listen 时,Laravel 队列作业永远不会仅以超时结束
- javascript - 为什么在定义了从对象到变量上下文的某些方法后丢失了?