JavaScript replace()第二个参数为函数时的参数

2018-2-18 14:21| 发布者: admin| 查看: 728| 评论: 0|来自: 蚂蚁部落

replace()函数具有替换功能,它可以具有两个参数,第一个参数可以是要被替换的字符串或者匹配要被替换字符串的正则表达式,第二个参数可以是替换文本或者一个函数,下面看一下关于replace()函数的几个代码实例。

代码实例:

[JavaScript] 纯文本查看 复制代码运行代码
var str="I love antzone and you?";
console.log(str.replace("an","java"));

上面的代码只能够替换字符串中的第一个指定子字符串。

[JavaScript] 纯文本查看 复制代码运行代码
var str="I love antzone and you?";
var reg=/an/g;
console.log(str.replace(reg,"java"));

上面的代码可以将字符串中的所有指定子字符串替换掉。

[JavaScript] 纯文本查看 复制代码运行代码
var str="I love antzone and you?";
console.log(str.replace("an",function(){
  return "java"}
));

上面的代码中,第二个参数是一个函数,可以用此函数的返回值替换字符串中指定的子字符串。当第二个参数为函数的时候,其实这个函数可以传递参数的,下面就通过代码实例介绍一下关于函数的参数问题。

代码如下:

[HTML] 纯文本查看 复制代码运行代码
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<script type="text/javascript">
var url = "http://www.softwhy.com/forum.php?mod=viewthread&tid=14743&extra=page%3D1";
//第一参数为字符串
console.group("字符串");
var oneResult = url.replace("www.softwhy.com",function(){
  console.log("replace输入参数:%o",arguments);
  var val = /www.softwhy.com/.exec(url);
 
  console.log("exec输出参数:%o",val);
                                                     
  console.assert(arguments[0] === val[0]);
  console.assert(arguments[1] === val["index"]);
  console.assert(arguments[2] === val["input"]);
  return "antzone";
});
console.log("replace返回字符串:"+oneResult);
console.groupEnd("字符串");
             
//第一参数为正则表达式
console.group("正则表达式");
var regexp_global = /[?&](\w+)=([^&]*)/g;
var count = 0;
var twoResult = url.replace(regexp_global,function(){
  console.log("第"+(count++)+"次运行");
  console.log("replace输入参数:%o",arguments);
  var val = regexp_global.exec(url);
  console.log("exec输出参数:%o",val);
                                                     
  console.assert(arguments[0] === val[0]);
  console.assert(arguments[1] === val[1]);
  console.assert(arguments[2] === val[2]);
  console.assert(arguments[3] === val["index"]);
  console.assert(arguments[4] === val["input"]);
  return count;
});
console.log("replace返回字符串:"+twoResult);
console.groupEnd("正则表达式");
</script>
</head>
<body>
 
</body>
</html>

在上面的代码中,分别演示了replace()函数第一参数是普通字符串和正则表达式的时候,第二个函数参数传递参数的情况,下面分别做一下简单的说明:

第一个参数是普通字符串:

a:3:{s:3:\"pic\";s:43:\"portal/201712/04/144158y4im8cs1274nnc7j.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

当第一个参数是普通字符串的时候,那么只会替换原字符串中的第一个子字符串,也就是说只会执行一次替换操作,为函数传递的参数和以普通字符串参数作为正则表达式执行exec()函数返回的数组的元素是相同的。

第一个参数是正则表达式:

a:3:{s:3:\"pic\";s:43:\"portal/201712/04/144227f6nxpxwp6pw9gu82.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

由于篇幅原因,这里只是截取了一部分运行结果内容,replace()函数的第一个参数是正则表达式,并且执行的是全局匹配,那么第二个函数参数会多次被调用,每次被调用传递的参数,也是和regexp_global.exec(url)返回的数组的元素内容是相同的。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部