[removed] how to pass found string.replace value to function?

后端 未结 3 1740
-上瘾入骨i
-上瘾入骨i 2020-12-21 09:32

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

相关标签:
3条回答
  • 2020-12-21 10:06

    When you use string.replace(rx,function) then the function is called with the following arguments:

    • The matched substring
    • Match1,2,3,4 etc (parenthesized substring matches)
    • The offset of the substring
    • The full string

    You can read all about it here

    In your case $1 equals Match1, so you can rewrite your code to the following and it should work as you desire:

    var str = "0123";
    var i = 0;
    str.replace(/(\d)/g,function(s,m1){i++;return m1;});
    alert(i);
    
    0 讨论(0)
  • 2020-12-21 10:23

    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;
    
    0 讨论(0)
  • 2020-12-21 10:29

    The expression

    function(s){i++;return s;}('$1')
    

    Creates the function and immediately evaluates it, passing $1 as an argument. The str.replace method already receives a string as its second argument, not a function. I believe you want this:

    str.replace(/(\d)/g,function(s){i++;return s;});
    
    0 讨论(0)
提交回复
热议问题