• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

javascript – 一个非捕获分组的简单问题

php 搞代码 3年前 (2022-01-25) 34次浏览 已收录 0个评论
文章目录[隐藏]

我在读jQuery代码的时候, 看到一个正则表达式定义
rsingleTag = /^(?:<\/\1>)?$/
rsingleTag用来匹配简单的html标签,
其中有一段非捕获分组:(?:<\/\1>), 问2本文来源gaodaima#com搞(代@码$网6

搞gaodaima代码

题来了:
为什么要用非捕获分组, 不用的话又怎么样?

例如这个正则表达式中也用到你非捕获分组:
rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/

为什么要用非捕获分组?
在正则表达式的哪个位置用?

回复内容:

我在读jQuery代码的时候, 看到一个正则表达式定义
rsingleTag = /^(?:<\/\1>)?$/
rsingleTag用来匹配简单的html标签,
其中有一段非捕获分组:(?:<\/\1>), 问题来了:
为什么要用非捕获分组, 不用的话又怎么样?

例如这个正则表达式中也用到你非捕获分组:
rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/

为什么要用非捕获分组?
在正则表达式的哪个位置用?

那就反问下自己非捕获分组是什么,从哪里知道的这个「名词」?
那么问题来了,非捕获性分组是干嘛的?

是你不想被捕获到的分组,在js中,一个小括号包起来的字符就是一个分组。在写正则的时候有时候必须用小括号来对一组同类型的字符进行分组,例如 /(abc){3}/,abc三个字母匹配三次,abc就是同类型的字符。但是在match或者exec或者replace等等方法中并不需要这一组字符,于是就不捕获咯。想一想下面这个需求
有一段字符串,使用 n 个 abcd 加一段其他字符组成的,现在我想要n个abcd后面的字符串怎么写

例如 abcdabcdabcdefg,想要的是 efg

<code class="js">'abcdabcdabcdefg'.match(/(abcd)+(.+)/) => ["abcdabcdabcdefg", "abcd", "efg"]'abcdabcdabcdefg'.match(/(?:abcd)+(.+)/) => ["abcdabcdabcdefg", "efg"]</code>

不写好像也能获得,但是当你正则写的特别长的时候,会出现一堆没用的结果,看着都头疼吧。

=============
再补句话,你问这些问题的时候,自己把控制台调出来,把加了?:和没加的结果输出一遍不就知道了。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:javascript – 一个非捕获分组的简单问题

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址