如何截取特定字符后的字符串?JS实现连缀域名拆分需求
拆分连缀.com域名字符串为数组的JS解决方案
嘿,这个需求我之前也碰到过,给你两个简单好用的JS实现方案,都能完美解决你的问题:
方法一:正则表达式匹配(推荐,更直接)
利用正则的非贪婪匹配特性,精准捕获每个以.com结尾的域名:
function splitDomainString(str) { // 非贪婪匹配所有以.com结尾的子串,确保每次匹配到最近的.com就停止 const domainRegex = /.*?\.com/g; // match返回匹配结果数组,无匹配时返回空数组避免报错 return str.match(domainRegex) || []; } // 测试一下 const inputStr = "example.comsuper.comregular.comextraordinary.comhello.com"; console.log(splitDomainString(inputStr)); // 输出: ["example.com", "super.com", "regular.com", "extraordinary.com", "hello.com"]
原理说明
.*?是非贪婪匹配,会尽可能少的抓取字符,直到遇到.com,这样就不会出现把多个域名连起来匹配的情况;g修饰符表示全局匹配,会找出所有符合规则的子串;- 用
|| []处理边界情况,如果输入字符串为空或者没有匹配项,会返回空数组而不是null。
方法二:split + filter + map组合(直观易懂)
通过拆分字符串再重组的方式实现,逻辑更清晰:
function splitDomainString(str) { // 按".com"拆分字符串,得到不带后缀的域名片段数组 const domainParts = str.split('.com'); // 过滤掉拆分后可能出现的空字符串,再给每个片段加上.com后缀 return domainParts.filter(part => part.trim()).map(part => `${part}.com`); } // 测试示例 const inputStr = "example.comsuper.comregular.comextraordinary.comhello.com"; console.log(splitDomainString(inputStr)); // 输出同样符合预期
原理说明
split('.com')会把输入字符串拆分成["example", "super", "regular", "extraordinary", "hello", ""]这样的数组;filter(part => part.trim())用来过滤掉最后一个空元素(因为原字符串结尾是.com,拆分后会多一个空项);map遍历每个片段,给它们加上.com后缀,重组为完整的域名。
两种方法都能满足你的需求,选哪个看你个人习惯就行~
内容的提问来源于stack exchange,提问作者eliHimself
相关产品推荐
相关产品推荐

