When I have something like this:
var str = \"0123\";
var i = 0;
str.replace(/(\\d)/g,function(s){i++;return s;}(\'$1\'));
alert(i);
Why doe
You are calling the function, which increments i once, and then returns the string '$1'.
To pass the value to a function, you can do:
str.replace(/\d/g, function (s) { /* do something with s */ });
However, it looks like you don't actually want to replace anything... you just want a count of the number of digits. If so, then replace is the wrong tool. Try:
i = str.match(/\d/g).length;