js的replace函数入参为function时的疑问

  近期在写js导出excel文件时运用到replace方法,此处详细的记录下它各个参数所代表的的意义。

定义和用法

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

语法

stringObject.replace(regexp/substr,replacement)

返回值

一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的。返回值

   这里的 replacement 可以是函数而不是字符串,就是我们所说的 replace 的入参 function 。

举个栗子

匹配字符串 "abcdefg" :

'abcdefg'.replace(/a(...).(.)/g,function(a,b,c,d,e,f){
    console.log(a,b,c,d,e,f)
})

// 输出 abcdef bcd f
0 abcdefg undefined "undefinedg"

说明:

/a(...).(.)/g  : 最前面的 "/" 与最后面的 "/" 是分隔符,表示正则表达式的开始与结束
       g : 表示正则表达式使用的global(全局)的状态.使用 global 标志表明在被查找的字符串中搜索操作将查找所有符合的项,而不仅仅是第一个.这也被称为全局匹配.
          【相关的标志还有i(ignoreCase,表示忽略大小写)、m(multiline,表示允许跨行)】
(...) 正则中的小括号,是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。
. 表示任意字符,括号里的三个...表示匹配三个任意字符。      

 function中参数说明:

  a:第一个参数,为正则所匹配到的内容,此处为 abcdef

    

  b、c : 第二个及以后的为 正则表达式中分组的内容,因为有两个 () 所以有两个分组,分别为b,c保存。
  d      : 匹配成功时所在的位置。

  e      : 整个字符串,此处为 abcdefg     

       f       : 然后就没有了(所以f是 undefined )

为啥最后输出还有个“undefinedg”,没查明白,欢迎盆友们查到了告诉我一下哈~

再粘个栗子体会下:

原文地址:https://www.cnblogs.com/zhangym118/p/6235998.html