The parameter replacement of the replace() method can be a function instead of a string. In this case, the function is called for each match and the string it returns is used as the replacement text. The first parameter of this function is a string matching the pattern. The next argument is a string that matches the subexpression in the pattern. There can be 0 or more such arguments. The next parameter is an integer that declares the position in the stringObject where the match occurs. The last parameter is the stringObject itself.
The following shows several ways to repalce javascript regular expressions. Some ways we rarely see elsewhere, such as the second and third-party methods.
//The following example is used to obtain the two parameters of the url and return the real Url before urlRewrite
var reg=new RegExp("(http://www.qidian.com/BookReader/)(\d ),(\d ).aspx","gmi") ;
var url="http://www.qidian.com/BookReader/1017141,20361055.aspx";
//Method 1, the simplest and most commonly used method
var rep=url.replace( reg,"$1ShowBook.aspx?bookId=$2&chapterId=$3");
alert(rep);
//Method 2, using a callback function with fixed parameters
var rep2=url.replace(reg ,function(m,p1,p2,p3){return p1 "ShowBook.aspx?bookId=" p3 "&chapterId=" p3});
alert(rep2);
//Method 3, using non-fixed Parameter callback function
var rep3=url.replace(reg,function(){var args=arguments; return args[1] "ShowBook.aspx?bookId=" args[2] "&chapterId=" args[3] ;});
alert(rep3);
//Method 4
//Method 4 is very similar to method 3. In addition to returning the replaced string, it can also be used separately Get parameters
var bookId;
var chapterId;
function capText()
{
var args=arguments;
bookId=args[2];
chapterId=args[3];
return args[1] "ShowBook.aspx ?bookId=" args[2] "&chapterId=" args[3];
}
var rep4=url.replace(reg,capText);
alert(rep4);
alert(bookId );
alert(chapterId);
//In addition to using the replace method to obtain the grouping of regular expressions, you can also use the test and exec methods to obtain the grouping, but the methods are different
var reg2=new RegExp("(http://www .qidian.com/BookReader/)(\d ),(\d ).aspx","gmi");
var m=reg2.exec("http://www.qidian.com/BookReader/1017141 ,20361055.aspx");
var s="";
//Get all groups
for (i = 0; i < m.length; i ) {
s = s m[i] "n";
}
alert(s);
bookId=m[2];
chapterId=m[3];
alert(bookId);
alert(chapterId);
//Use the test method to get the group
var reg3=new RegExp("(http://www.qidian.com/BookReader/)(\d ),(\d ).aspx","gmi");
reg3.test("http:/ /www.qidian.com/BookReader/1017141,20361055.aspx");
//Get three groups
alert(RegExp.$1);
alert(RegExp.$2);
alert(RegExp.$3);
var str="www.baidu.com";
//str.format("Okay","q")
str.replace(new RegExp("(\.)( bai)du","g"),function(){
for(var i=0;i
{
document.write(arguments[i] "
");
}
document.write("------------------------------- ---------------------
");
});
Two examples (proof, replace The results of entering regular parameters and passing parameters by characters are different):
alert("123".replace("1",function(){var un;return un;})); //pop up undefined23
alert(" 123".replace(new RegExp("1"),function(){var un;return un;})); //pop up 23