JS正则问题:替换连续少于6次的0,保留6次及以上的0
正则解决方案
需求回顾
将字符串 11110000111100000000111100001111000000 中,连续出现少于6次的0替换为对应数量的点(如连续4个0替换为....),连续6次及以上的0保留。
可行正则及替换逻辑
使用带零宽断言的正则精准匹配符合条件的短0序列,避免误匹配长0串或捕获无关字符:
// 正则表达式 const regex = /(?<=^|1)0{1,5}(?=1|$)/g; // 替换操作 const originalStr = '11110000111100000000111100001111000000'; const result = originalStr.replace(regex, match => '.'.repeat(match.length));
正则解释
(?<=^|1):反向零宽断言,确保匹配的0串前是字符串开头或字符10{1,5}:匹配1-5个连续的0(即需要替换的短0序列)(?=1|$):正向零宽断言,确保匹配的0串后是字符1或字符串结尾
这样就能精准定位所有被1(或首尾)包裹的短0序列,不会触及长度≥6的长0串。
为什么之前的正则无效?
- 正则
/(?!0{6,})0{1,5}/g:会误匹配长0串中的分段0(比如8个0的前5个0,因为其后方剩余的0不足6个,断言(?!0{6,})会成立),导致长0串被错误替换。 - 正则
/((?:^|1)(?!0{6,})0{1,5})/g:将^|1纳入了捕获组,替换时会连带捕获到的1一起修改,不符合需求。
内容的提问来源于stack exchange,提问作者MGX
相关产品推荐
相关产品推荐

