如何从01字符串匹配指定序列?正则匹配结果不符求助
问题分析
- 输出无单引号:
console.log直接输出数组时,字符串元素默认不带单引号,需手动格式化。 - 缺少空字符串:
match(/.../g)仅返回正则匹配到的非空结果,不会包含原字符串中不符合匹配规则的部分,而你期望的空字符串对应这些未匹配的区域。 - 正则匹配范围有限:原正则仅能匹配特定长度的交替序列(如
10/101、01/0101),无法覆盖更长的交替序列,也无法处理未匹配区域的空值填充。
修正代码
要同时获取匹配序列和空字符串,需手动遍历字符串,逐个位置尝试匹配,未匹配时添加空字符串:
let stringdata = "01110010100111101000111"; let result = []; let index = 0; // 匹配任意长度≥2的交替序列:0开头的01/0101/010等,1开头的10/101/1010等 const regex = /(?:(01)+0?|(10)+1?)/; while (index < stringdata.length) { regex.lastIndex = index; const match = regex.exec(stringdata); if (match) { result.push(match[0]); index += match[0].length; } else { result.push(''); index += 1; } } // 格式化输出带单引号的结果 console.log(result.map(item => `'${item}'`).join(','));
关键调整说明
- 遍历逻辑:通过
while循环逐个位置检查,匹配到符合规则的序列则加入结果并跳过对应长度;未匹配则添加空字符串并移动一位,确保覆盖整个原字符串。 - 正则优化:将原正则的
(10)1?改为(10)+1?,支持匹配更长的1开头交替序列(如1010);(01)+0?保持不变,支持0开头的任意长度交替序列。 - 输出格式化:用
map将每个元素包裹单引号,再用join拼接成你期望的字符串格式。
内容的提问来源于stack exchange,提问作者BootCamp
相关产品推荐
相关产品推荐

