You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaScript正则表达式去除连续重复数字的问题排查

第一种正则写法的问题解析

核心问题:静态正则字面量无法动态匹配循环变量

第一种写法里的/ii/g是静态正则字面量,它的匹配规则是固定的——只会匹配字符串里连续的两个字母i,和循环中的变量i完全没关系。

循环里的i是遍历当前字符(比如3、5、8这些数字),但正则字面量不会把其中的i替换成循环变量的值,每次执行a.replace(/ii/g, i)时,都找不到任何匹配项,原字符串自然不会有变化,最后输出的还是处理前的123345567889。

第二种写法为什么能正常工作

第二种写法用new RegExp()构造了动态正则:每次循环都会把当前的i(比如数字3)拼进正则模板,生成匹配该数字连续重复的规则,比如当i=3时,正则等价于/(3)(3)/g,能精准找到字符串里的33,并替换成单个3。

更高效的优化方案

其实完全不需要循环,用一个正则就能一次性搞定所有连续重复数字:

let a = "1 2 3 3 4 5 5 6 7 8 8 9";
a = a.split(" ").join("").replace(/(\d)\1+/g, "$1");
console.log(a); // 输出:123456789

这里(\d)\1+的意思是:匹配一个数字(捕获到分组1),紧接着出现一次或多次和分组1相同的数字,然后替换成分组1的内容,也就是保留单个数字。

内容的提问来源于stack exchange,提问作者qusai ghalil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:10:56