JavaScript如何从不含https或www的字符串中提取域名形式URL
JavaScript提取无协议、无www标识域名的实现方法
针对从普通文本中提取google.com、amazon.uk这类不带http/https、www前缀的域名场景,直接用正则全局匹配是最简便的实现方式,不需要引入额外依赖。
核心实现代码
// 待匹配的测试字符串 let a = "I visit google.com often times but.. not amazon.uk" // 域名匹配正则 const domainMatchReg = /\b(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}\b/g // 执行匹配 const matchResult = a.match(domainMatchReg) console.log(matchResult) // 输出: ['google.com', 'amazon.uk']
正则规则说明
\b:单词边界校验,确保匹配内容前后是空格、标点等非单词字符,避免从长单词中间误截取内容(?:[a-zA-Z0-9-]+\.)+:非捕获组,匹配至少一段「合法域名字符+英文点」的结构,同时支持多级域名(比如news.qq.com这类二级、三级域名场景)[a-zA-Z]{2,}:匹配长度至少2位的字母顶级域,覆盖com、uk、cn、info等绝大多数通用顶级域、国家顶级域- 后缀
g:开启全局匹配模式,一次性提取字符串中所有符合规则的域名
适配调整提示
- 上述正则会自动过滤示例中
but..这类连续点的无效内容,不会产生误匹配 - 如果需要支持中文域名,只要在方括号的字符匹配范围内追加中文区间
\u4e00-\u9fa5即可 - 如果需要覆盖更长的顶级域(比如更长的品牌专属顶级域),可以调整
{2,}的长度上限参数
内容的提问来源于stack exchange,提问作者Lahfir
相关产品推荐
相关产品推荐

