如何使用正则表达式替换重复出现的特定序列?
如何使用正则表达式替换重复出现的特定序列?
嘿,我一眼就瞅出问题所在啦!你写的正则/(:0000:){2,}/g其实是在找连续两次及以上的:0000:(也就是像:0000::0000:这种格式),但你的输入字符串里是:0000:0000:——中间的0000之间只有一个冒号,所以这个正则根本匹配不到它!
咱们调整下思路,分两步来处理你的需求:
第一步:替换2个及以上连续的0000段
我们需要匹配「冒号开头,跟着至少两个0000,每个0000后面都带冒号」的结构,对应的正则是/(?::0000){2,}:/g。把这个替换成::,就能把:0000:0000:变成::啦。
第二步:替换单个的:0000:
用正则/(:)0000(:)/g,把它替换成$10$2,这样单个的:0000:就会变成:0:。
把这两步结合起来,你的代码就变成这样了:
let str = document.getElementById("input").textContent; // 先处理多个连续的0000段 let res = str.replace(/(?::0000){2,}:/g, "::"); // 再处理单个的0000段 res = res.replace(/(:)0000(:)/g, "$10$2"); document.getElementById("output").textContent = res;
测试你的输入字符串2A00:1450:4028:080B:0000:0000:00001111:2005,运行后就能得到你想要的2A00:1450:4028:080B::00001111:2005,而且00001111也不会被误替换,完全符合你的要求~
备注:内容来源于stack exchange,提问作者LWC




