Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

regex - Javascript: how to pass found string.replace value to function?

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 does "i" equal 1 and not 4? Also, is it possible to pass the real value of $1 to a function (in this case 0,1,2,3) ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...