使用正则从URL提取纯小写字母域名的JS函数问题求助
修正后的正则提取函数
原函数的问题
- 正则表达式错误地用字符串包裹并包含
/和/i标志,导致match无法正确解析正则规则 - 捕获组索引错误,返回的
matches[1]是协议前缀(如https://www.),而非目标域名部分 - 域名匹配逻辑未限制仅提取
[a-z]字符,(.*)+会匹配任意字符,无法实现遇到非字母即停止的需求
修正后的函数
const getHostnameFromRegex = (url) => { // 匹配协议前缀、可选www,捕获开头连续的纯字母部分 const matches = url.match(/^(https?:\/\/)?(www\.)?([a-z]+)[^a-z]/i); // 返回捕获到的字母部分,转小写确保符合[a-z]要求 return matches ? matches[3].toLowerCase() : null; };
函数说明
^(https?:\/\/)?:匹配可选的http://或https://协议前缀,?:标记为非捕获组,避免占用有效捕获位(www\.)?:匹配可选的www.前缀,不影响目标捕获组([a-z]+):核心捕获组,匹配连续的1个及以上字母,通过/i标志忽略大小写[^a-z]:匹配第一个非字母字符,确保仅提取域名中开头的纯字母段- 最终将捕获结果转小写,严格保证返回值仅包含
[a-z]字符
测试示例
- 输入
https://google.com→ 返回google - 输入
https://google22.com→ 返回google - 输入
http://www.Example123.net→ 返回example - 输入
baidu.cn→ 返回baidu
内容的提问来源于stack exchange,提问作者Bahis Kritik
相关产品推荐
相关产品推荐

