JavaScript中replace函数为何返回偶数索引?如何替换下划线为出现次数?
问题解析与解决方案
为什么得到偶数索引?
String.replace()的回调函数中,第二个参数i是匹配字符在原字符串里的原始位置索引,不是匹配的次数。你用的原字符串是'_,_,_,_',每个_的位置分别是0、2、4、6(逗号占了1、3、5的位置),所以回调返回这些索引,最终结果就是'0,2,4,6'。
实现需求的方法
要把每个_替换成它的出现次数(从0开始计数),可以用以下两种方式:
方式一:外部计数器
let count = 0; const result = '_,_,_,_'.replace(/_/g, () => count++); console.log(result); // 输出 '0,1,2,3'
每次匹配到_时,返回当前的count值,随后count自增,刚好对应_的出现次数。
方式二:闭包封装计数器(避免全局变量污染)
const result = '_,_,_,_'.replace(/_/g, (() => { let count = 0; return () => count++; })()); console.log(result); // 输出 '0,1,2,3'
把计数器封装在自执行闭包里,既实现功能,又不会影响外部变量。
内容的提问来源于stack exchange,提问作者TAHER El Mehdi
相关产品推荐
相关产品推荐

