对replace更深层次的使用和思考

在日常工作生活中,我们在js中用replace函数可能是到处可见,但是一直以来我用的都是比较常见浅显的功能,比如替换一个字符等等。

这次再看一道算法题的时候,偶然发现我们的replace能给我们提供很多便利,先上代码

function converter(obj) {
        for (key in obj) {
          let reg = /_([a-zA-Z])/g
          let result = key.replace(
            reg,
            function (match, captureGroup1, offset, string, groups) {
              console.log('match = ', match)
              console.log('captureGroup1 = ', captureGroup1)
              console.log('offset = ', offset)
              console.log('string = ', string)
              console.log('groups这里暂不讨论 = ', groups)
              return captureGroup1.toUpperCase()
            }
          )
          return `{${result + ':' + obj[key]}}`
        }
      }
// 调用
const a = { a_bc_def_aaa: 1111 }
console.log(converter(a))

看起来是不是很简单,这里正则代表的是匹配下划线加字母,如_a(这里我就不多提了,日后有正则相关的博客我会发表出来),下面我们来看我们的重点函数replace

剧MDN介绍

第一个参数match:代表匹配的子字符串,如match = _b

第二个参数captureGroup:这里有个捕获组的概念,我总结了一下,无论是普通还是命名捕获组,都是以一个括号对的呈现,一个括号对()代表一个捕获组即p1,p2,...,pN,这里打印的是captureGroup1 = b

第三个参数offset代表的是偏移量,其实就是匹配到的子字符串首的index值,如offset = 1

第四个参数代表的是检查的原始字符串,如string = a_bc_def_aaa

第五个参数代表的是命名捕获组组成的对象,这里暂不讨论。如groups这里暂不讨论 =  undefined

参数梳理完了,我再加几个示例大家看一下就知道几个参数的具体意义

const str = 'ababdd'
      str.replace(/(b)(d)/g, function () {
        console.log(arguments) //  ["bd", "b", "d", 3, "ababdd"]
      })

两个括号对,对应两个捕获组,所以第二个参数有b,d

const str = 'ababdd'
      str.replace(/(a)(b)(d)/g, function () {
        console.log(arguments) //  ['abd', 'a', 'b', 'd', 2, 'ababdd']
      })

增加一个捕获组,所以第二个参数有a,b,d

参数的确切数量取决于第一个参数是否为 RegExp 对象,以及它有多少个捕获组。 

今天主要是对replace函数的拓展和深入一步研究,欢迎大家来一起讨论

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值