如何在JavaScript中按指定规则拆分长度不一致的字符串
实现方案
你可以通过正则分组的方式快速实现需求,也可以手动查找数字起始下标完成拆分,两种方案的效果一致:
方案1:正则分组实现(推荐)
你的拆分规则刚好可以对应5个正则捕获组,直接匹配提取即可:
let string = "ansdl001,badgef001,abcdeh002,mfghe002"; let array = string.split(","); // 正则规则:前3个分组各匹配单个字母,第4个分组匹配数字前的剩余字母,第5个分组匹配末尾数字 const splitReg = /^([a-z])([a-z])([a-z])([a-z]+)(\d+)$/i; const result = array.map(item => { const matchRes = item.match(splitReg); // 跳过索引0的完整匹配结果,取后面5个分组的内容 return matchRes.slice(1); }) console.log(result);
运行输出结果:
[ [ 'a', 'n', 's', 'dl', '001' ], [ 'b', 'a', 'd', 'gef', '001' ], [ 'a', 'b', 'c', 'deh', '002' ], [ 'm', 'f', 'g', 'he', '002' ] ]
注:你示例中给出的最后一项末尾数字是003属于笔误,实际按输入字符串会输出002。
方案2:手动查找数字下标实现
如果不想用正则,也可以手动遍历找到第一个数字的位置再拆分:
let string = "ansdl001,badgef001,abcdeh002,mfghe002"; let array = string.split(","); function splitSingleItem(item) { // 查找第一个数字出现的下标 const firstNumIndex = item.search(/\d/); return [ item[0], item[1], item[2], item.slice(3, firstNumIndex), item.slice(firstNumIndex) ] } const result = array.map(splitSingleItem); console.log(result);
内容的提问来源于stack exchange,提问作者Hassan Ali Amjad
相关产品推荐
相关产品推荐

