如何在JavaScript中正确统计被替换字符串的数量?
解决JavaScript替换字符串时统计替换次数的问题
你这段代码的问题其实挺明显的——首先Counter()函数压根没被执行到,其次就算执行了,也没法和替换次数挂钩!
先看你原代码里的致命小错误:
function Replace(str) { return str.replace(/A/g, "1"); Counter(); // 这行写在return之后,函数执行到return就直接结束了,永远不会运行! }
这就是为什么increment一直是0的直接原因。就算把Counter()移到return前面,它也只会被调用一次,和实际替换的次数完全没关系。
正确的做法:利用replace的回调函数计数
String.replace()方法的第二个参数可以是一个回调函数,每次匹配到目标字符串时,这个回调就会被触发一次。我们可以把计数逻辑放到这个回调里,完美对应每一次替换操作。
修改后的代码示例:
var input = "A B C A"; var increment = 0; function Replace(str) { return str.replace(/A/g, function() { // 每匹配到一次"A",计数器就自增1 increment++; // 返回要替换成的内容 return "1"; }); } alert(Replace(input)); // 输出 "1 B C 1" alert(increment); // 输出 2
如果你想保留单独的Counter函数,也可以这么写:
var input = "A B C A"; var increment = 0; function Counter() { increment++; } function Replace(str) { return str.replace(/A/g, function() { Counter(); return "1"; }); } alert(Replace(input)); // 输出 "1 B C 1" alert(increment); // 输出 2
这种方式的核心就是让计数逻辑和每次替换操作绑定在一起,回调函数触发的次数就是实际替换的次数,完全不需要自己去匹配计数,既简洁又准确。
内容的提问来源于stack exchange,提问作者Vianne
相关产品推荐
相关产品推荐

