zoukankan      html  css  js  c++  java
  • js 中 replace 的第二个参数是函数时的函数参数解析

    当replace() 方法的第二个参数 replacement是函数而不是字符串时,每次匹配都调用该函数,将这个函数的返回的字符串将作为替换文本使用。这个函数是自定义的替换规则。

    当第二个参数是函数时,这个函数的前三个参数():

    1、当正则没有分组的时候,传进去的第一个实参是正则捕获到的内容,第二个参数是捕获到的内容在原字符串中的索引位置,第三个参数是原字符串(输入字符串)

    2、当正则有分组的时候,第一个参数是总正则查找到的内容,后面依次是各个子正则查找到的内容。

    2、传完查找到的内容之后,再把总正则查找到的内容在原字符串中的索引传进(就是arguments[0]str中的索引位置)。最后把输入字符串(就是原字符串)传进去

    示例1

    要求:找到字符串中的小写字母,给它在后边加上小括号来注明它在str字符串中的位置。比如str中的第一个a,它出现在str字符串的第一个索引位置中,则a变成a(1)。下面的str最终得到的结果是Xa(1)ZZc(4)Ud(6)Fe(8)

    var str="XaZZcUdFe";
    
    var reg=/[a-z]/g;//注意:全文替换必须加g
    
    str=str.replace(reg,function(){
    
    return arguments[0]+"("+arguments[1]+")";
    
    //arguments.length的值是3,在reg没有分组的情况下length属性肯定是3.
    
    //其中arguments[0]是正则捕获查找到的内容;arguments[1]是正则查找到的内容在str这个字符串中的索引位置;arguments[2]是str字符串本身(叫输入字符串)
    
    //这个匿名函数被自动执行四次,每一次arguments里的值分别是:
    
    //第一次:arguments[0]是a,arguments[1]是1,arguments[2]是原字符str本身
    
    //第二次:arguments[0]是c,arguments[1]是4,arguments[2]是原字符str本身
    
    //第三次:arguments[0]是,arguments[1]是6,arguments[2]是原字符str本身
    
    //第四次:arguments[0]是e,arguments[1]是8,arguments[2]是原字符str本身
    
     
    
    })
    
    alert(str);//弹出 Xa(1)ZZc(4)Ud(6)Fe(8)

    示例2

    要求:找出下面字符串中两个连着出现的数字,用它们的和将它们替换。

          比如第一次找到45,用9替换,第二次找到的是89,用17替换,第三次找到的是72,用9替换,最终生成的字符串是96a17b9cs

    var str="456a89b72cs";
    
    var reg=/(d)(d)/g;
    
    str=str.replace(reg,function(){
    
    return Number(arguments[1])+Number(arguments[2]);
    
    });
    
    alert(str);//弹出96a17b9cs
    
    //上面replace里的匿名函数会被自动执行三次(因为匹配到了三次);
    
    //每次执行,arguments.length都是5;arments[0]是总正则查找到的字符串,arguments[1]是第一个分组查找到的内容,arguments[2]是第二个分组查找到的内容,arguments[3]是总正则查找到的内容在str这个字符串中的索引位置,arguments[4]是str这个字符串本般
    
    //第一次这五个参数的值分别是:arguments[0]是"45",arguments[1]是"4",arguments[2]是"5",arguments[3]是0,arguments[4]是"456a89b72cs";
    
    //第二次这五个参数的值分别是:arguments[0]是"89",arguments[1]是"8",arguments[2]是"9",arguments[3]是4,arguments[4]是"456a89b72cs";
    
    //第三次这五个参数的值分别是:arguments[0]是"45",arguments[1]是"4",arguments[2]是"5",arguments[3]是0,arguments[4]是"456a89b72cs"
  • 相关阅读:
    高德地图js开发,给城市某个区添加颜色
    threejs 实现易拉罐换肤功能
    React 跨页面保留前一页状态的一种实现方法
    nginx 解决客户端跟服务跨域问题
    React图片预览组件,支持缩放、旋转、上一张下一张功能
    h5 高德地图开发 谷歌浏览器定位失败解决方案
    echarts点击省份显示对应的省份
    sec:authorize 标签 通过不通过权限例子
    择左边多选框的值移动到右边多选框
    更改css element.style
  • 原文地址:https://www.cnblogs.com/smile-fanyin/p/13035710.html
Copyright © 2011-2022 走看看