如何使用正则表达式提取字符串中冒号前后的键值分别存入数组
解决方法
这里提供两种常用的实现方式,均能达到你的需求:
1. split拆分法(推荐,逻辑简单易读)
先按分号拆分出所有独立键值对,再对每个键值对按冒号拆分,分别存入两个数组即可:
var str = "current_year:45;last_year:20;all:65"; var a = []; var b = []; str.split(';').forEach(keyValuePair => { const [key, value] = keyValuePair.split(':'); a.push(key); b.push(value); })
健壮性优化:如果字符串可能存在末尾多余分号的情况,可将拆分逻辑改为str.split(';').filter(Boolean).forEach(...),过滤空值避免异常。
2. 正则匹配法
你之前写的正则规则本身没问题,只需要正确提取匹配到的分组即可:
var str = "current_year:45;last_year:20;all:65"; var a = []; var b = []; const reg = /([^:\s]+):([^:\s]+)/g; let matchResult; while ((matchResult = reg.exec(str)) !== null) { a.push(matchResult[1]); b.push(matchResult[2]); }
更简洁的ES6+写法:
const matches = Array.from(str.matchAll(/([^:]+):([^;]+)/g)); const a = matches.map(item => item[1]); const b = matches.map(item => item[2]);
内容的提问来源于stack exchange,提问作者NewProgrammer
相关产品推荐
相关产品推荐

