javascript正则表达式分组捕获理解

我们先来看一段js代码:

var rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/;
console.log(rquickExpr.exec('#div'));//["#div", undefined, "div", index: 0, input: "#div"]
console.log(rquickExpr.exec('<li>'));//["<li>", "<li>", undefined, index: 0, input: "<li>"]

解释: (?:(<[\w\W]+>)[^>]*|#([\w-]*)) 中的 (<[\w\W]+>)[^>]* 或者 #([\w-]*) 是不捕获的。

有三个提示捕获的地方:

1. ^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$  这个最长的。

2.(?:(<[\w\W]+>)[^>]*|#([\w-]*))   中的 (<[\w\W]+>) 是捕获的, 所以 能捕获到,就是捕获的结果,不能捕获到就是 undefined.

3.(?:(<[\w\W]+>)[^>]*|#([\w-]*))   中的  ([\w-]*) 是捕获的, 所以 能捕获到,就是捕获的结果,不能捕获到就是 undefined.

 

第一个:rquickExpr.exec('#div')。

  1. 能匹配: ^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$,所以第一个是  #div

  2.不能匹配 :(<[\w\W]+>)[^>]* ,所以  (<[\w\W]+>) 这个捕获是  undefined.

  3.能匹配:#([\w-]*), 所以 ([\w-]*) 这个捕获是 div

合起来就是 : ["#div", undefined, "div"]

第二个:rquickExpr.exec('<li>')。

 1. 能匹配: ^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$,所以第一个是  <li>

 2.能匹配 :(<[\w\W]+>)[^>]* ,所以  (<[\w\W]+>) 这个捕获是  <li>.

 3.不能匹配:#([\w-]*), 所以 ([\w-]*) 这个捕获是 undefined.

合起来就是 : ["<li>", "<li>",undefined]

 

转载于:https://www.cnblogs.com/huaan011/p/7221373.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值