RegExp.exec() 学习笔记

RegExp.exec() 学习笔记

看到一道关于从url query部分取值的面试题,用了正则/.+\?(.+)$/.exec(url)[1];,将 ? 后面的字符串取出。而我一直是用分割字符串来获取参数,故学习一番。记录在此,过几天忘了好复习。。。

最基础的正则知识可参考:

https://juejin.cn/post/6844904037481988103

https://www.w3school.com.cn/jsref/jsref_exec_regexp.asp

不使用分组的情况

执行以下代码:

var str = 'We can!'
var patt = /[A-Za-z]+/g // 区间匹配
console.log(patt.exec(str))
console.log(patt.exec(str))
console.log(patt.exec(str))

我们会得到:

["We", index: 0, input: "We can!", groups: undefined]
["can", index: 3, input: "We can!", groups: undefined]
null

我们可以看到,带上/g全局匹配时,exec是有状态的,会依次返回可匹配的值,以及匹配值首字母对应下标。而不使用全局匹配时,则为无状态的,每次都返回相同的结果(即第一个匹配的字符串)。

使用分组的情况

执行以下代码:

var str = 'We can!'
var patt = /([A-Za-z])+/g // 区间匹配 + 分组
console.log(patt.exec(str))
console.log(patt.exec(str))
console.log(patt.exec(str))

我们会得到:

["We", "e", index: 0, input: "We can!", groups: undefined]
["can", "n", index: 3, input: "We can!", groups: undefined]
null

注意,返回数组中下标为1的成员,这是对应分组可匹配到的最后一个结果,这个结果看起来很奇怪,下面给一个正常点的例子。

var re = /666\s(brown).+?(jumps)/ig;
var result = re.exec('666 Brown 121212 Jumps 2333');
console.log(result)
["666 Brown 121212 Jumps", "Brown", "Jumps", index: 0, input: "666 Brown 121212 Jumps 2333", groups: undefined]

result[1]对应的就是第一个分组(brown)匹配的结果。

参考规范

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值