javascript-一个非捕获分组的简单问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-一个非捕获分组的简单问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1466字,纯文字阅读大概需要3分钟。
内容图文
我在读jQuery代码的时候, 看到一个正则表达式定义rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/
rsingleTag用来匹配简单的html标签,
其中有一段非捕获分组:
(?:<\/\1>)
, 问题来了:为什么要用非捕获分组, 不用的话又怎么样?
例如这个正则表达式中也用到你非捕获分组:rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/
为什么要用非捕获分组?
在正则表达式的哪个位置用?
回复内容:
我在读jQuery代码的时候, 看到一个正则表达式定义rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/
rsingleTag用来匹配简单的html标签,
其中有一段非捕获分组:(?:<\/\1>)
, 问题来了:
为什么要用非捕获分组, 不用的话又怎么样?
例如这个正则表达式中也用到你非捕获分组:rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/
为什么要用非捕获分组?
在正则表达式的哪个位置用?
那就反问下自己非捕获分组是什么,从哪里知道的这个「名词」?
那么问题来了,非捕获性分组是干嘛的?
是你不想被捕获到的分组,在js中,一个小括号包起来的字符就是一个分组。在写正则的时候有时候必须用小括号来对一组同类型的字符进行分组,例如 /(abc){3}/
,abc三个字母匹配三次,abc就是同类型的字符。但是在match或者exec或者replace等等方法中并不需要这一组字符,于是就不捕获咯。想一想下面这个需求
有一段字符串,使用 n 个 abcd 加一段其他字符组成的,现在我想要n个abcd后面的字符串怎么写
例如 abcdabcdabcdefg
,想要的是 efg
'abcdabcdabcdefg'.match(/(abcd)+(.+)/) => ["abcdabcdabcdefg", "abcd", "efg"]
'abcdabcdabcdefg'.match(/(?:abcd)+(.+)/) => ["abcdabcdabcdefg", "efg"]
不写好像也能获得,但是当你正则写的特别长的时候,会出现一堆没用的结果,看着都头疼吧。
=============
再补句话,你问这些问题的时候,自己把控制台调出来,把加了?:和没加的结果输出一遍不就知道了。
内容总结
以上是互联网集市为您收集整理的javascript-一个非捕获分组的简单问题全部内容,希望文章能够帮你解决javascript-一个非捕获分组的简单问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。