JavaScript文本匹配问询:如何实现两类指定输出结果
JavaScript正则匹配问题解答
原始代码:
let text = "01110010100111101000111"; let result = text.match(/01/g); // 仅修改此行 console.log(result);
问题1:生成指定输出数组
要让match返回数组['01','','10','0101','','01','','','01010','','01','','',''],需要匹配所有0和1的交替序列(包括0101、01010这类长序列),同时在无交替序列的位置返回空串。注意直接匹配空串会导致全局匹配无限循环,因此我们优先匹配长序列,再用位置限定的方式匹配空串:
let result = text.match(/01010|0101|01|10|(?!^)(?<=.)/g);
这个正则会按优先级先匹配最长的交替片段,再匹配短交替序列,最后在每个非开头的字符后位置匹配空串,刚好对应目标输出的数组结构。
问题2:提取目标子串
要得到输出'01110010100111101000'(即去掉原始字符串末尾的三个1),可以利用正向预查精准匹配末尾三个1之前的所有内容:
// 直接获取目标字符串(需添加[0]提取匹配结果) let result = text.match(/^.*(?=1{3}$)/)[0];
如果要求仅修改正则部分(不添加[0]),可以使用全局匹配确保返回的数组仅包含目标子串:
let result = text.match(/^.*(?=1{3}$)/g);
此时console.log(result)会输出['01110010100111101000'],业务中可通过result[0]直接获取目标字符串。
内容的提问来源于stack exchange,提问作者marivic valdehueza
相关产品推荐
相关产品推荐

