Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >正则表达式 -- 捕获括号

正则表达式 -- 捕获括号

作者头像
用户7293182
发布于 2022-01-13 09:07:44
发布于 2022-01-13 09:07:44
1.3K00
代码可运行
举报
文章被收录于专栏:jQuery每日经典jQuery每日经典
运行总次数:0
代码可运行

jQuery中充斥着大量的正则表达式,在jQuery不断改良的过程中,正则表达式的用法也在发生着变化。

其中变化最大的就是(?:pattern)的使用,当然还有?家族的一系列表达式用法。

mdn中对(?:pattern)是这样描述的:

Matches x but does not remember the match. These are called non-capturing groups. The matched substring can not be recalled from the resulting array's elements [1], ..., [n] or from the predefined RegExp object's properties $1, ..., $9.匹配 x 不会捕获匹配项。这被称为非捕获括号(non-capturing parentheses)。匹配项不能够从结果数组的元素 [1], ..., [n] 或已被定义的 RegExp 对象的属性 $1, ..., $9 再次访问到

非捕获括号是什么?捕获括号又是什么?

先从match(), exec(), test()这三个方法说起,捕获括号在exec()的介绍中有涉及。

方法的区别

  1. test() 执行一个检索,查看正则表达式与指定的字符串是否匹配。返回true 或false。也可以用字符串的search()方法代替。 语法: regexObj.test(str) str.search(regexp) 这两者也是有区别的。 search()每次调用都是从下标为0开始查询; test()方法不是全局匹配时与search()相同; test()是全局匹配时,下次执行则从查询出的匹配项的下标开始查询(第一次为0)。 例如:统计字符串中某个子字符串出现的次数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function getLength(reg,str){
var i=0;
while(reg.test(str)){
i++;
}
return i;
}
getLength(/a/g, "abaca")  //print 3
  1. match() 提取字符串匹配到正则表达式的匹配项 语法:str.match(regexp) 返回值:一个包含匹配结果的数组,如果没有匹配项,则返回null。 描述: 如果正则表达式包含g标志,则该方法返回一个包含所有匹配结果的数组。 如果正则表达式没有g标志,返回和exec(str)相同的结果。 例子:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);console.log(matches_array);
// ['A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e']
  1. exec() 语法:regexObj.exec(str) 返回值:返回一个数组,并且更新正则表达式对象的属性(例如lastIndex)。而且返回的数组拥有一个额外的input属性,该属性包含原始字符串。另外,还拥有一个index属性,该属性表示匹配结果在原字符串中的索引。 返回的数组中,第一个元素是满足匹配的字符串,之后的元素是对应成功匹配被捕获的字符串的捕获括号(capturing parenthesis)。

概念有点抽象,举个例子:

  1. var str = "For more information, see Chapter 3.4.5.1"; var re = /(chapter \d+(\.\d)*)/i; var found = str.match(re); console.log(found); // logs ["Chapter 3.4.5.1", "Chapter 3.4.5.1", ".1"]

捕获括号与非捕获括号

不了解捕获括号的同志们可能会疑惑最后一个例子--a例子的输出结果。

捕获括号字面理解 去捕获字符串中的括号,既然捕获了内容,就要有个地方存放。先看下下面的例子,再重新读一下exec()的描述信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/a(c)(a)/g.exec("aca") //print ["aca", "c", "a"] 
/a(c(a))/g.exec("aca") //print ["aca", "ca", "a"]

非捕获括号那不就是不去捕获这个括号的内容嘛

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/a(?:c)(a)/g.exec("aca") //print ["aca", "a"] 
/a(?:c(a))/g.exec("aca") //print ["aca", "a"]
/a(c(?:a))/g.exec("aca") //print ["aca". "ca"]

至于什么时候捕获括号,什么时候非捕获括号就要视情况而定了。灵活的使用这两者会有不一样的收获。

如果有兴趣,可以看一下下面的正则表达式

rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/

这个正则表达式是jQuery的入口。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 jQuery每日经典 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
JavaScript正则表达式入门知识详细介绍
正则表达式,在各种语言(JS、Java、Php等)里面都是很常见的,而且语法都有相似之处。作为新手,第一次接触正则,可能一脸茫然,这是什么东西,语法这么奇怪。其实它的语法是有迹可循的,而且基本是规定的语法模式,只要掌握它的语法,你也可以写出属于你自己的正则表达式。
Javanx
2019/09/04
7480
JavaScript正则表达式入门知识详细介绍
详解JavaScript的正则表达式
正则表达式是用于匹配字符串的语法。在 JavaScript中,被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。正则表达式语法,看这里!
Learn-anything.cn
2021/12/26
8200
学习笔记-正则表达式[通俗易懂]
1.MDN正则表达式 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions 2.https://www.cnblogs.com/tugenhua0707/p/5037811.html
全栈程序员站长
2022/08/04
2530
正则表达式基础
正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象。
不愿意做鱼的小鲸鱼
2022/08/24
2090
正则表达式基础
可能是最好的正则表达式教程的笔记
发现匹配的有'These are some phone numbers ...' 注意正则表达式是匹配一个连续串的规则,所以可以看到三个字母的单词可以匹配到,6个单词的也可以匹配到。
vincentKo
2022/09/19
1.5K0
可能是最好的正则表达式教程的笔记
手把手教你认识前端的正则表达式
该方法用来将字符串中的某些子串替换为需要的内容,接受两个参数,第一个参数可以为正则或者子字符串,表示匹配需要被替换的内容,第二个参数为被替换的新的子字符串。如果声明为全局匹配则会替换所有结果,否则只替换第一个匹配到的结果。
前端老鸟
2022/03/07
4510
【JS】128-重温基础:正则表达式
前置知识: JS中的正则表达式是用来匹配字符串中指定字符组合的模式。 另外需要记住:正则表达式也是对象。
pingan8787
2020/05/13
8540
正则表达式-学习2 - 语法语法学习重点详解
Character classes match a character from a specific set. There are a number of predefined(预定的) character classes and you can also define your own sets.
贺贺V5
2018/08/21
4130
正则表达式-学习2 - 语法语法学习重点详解
JavaScript正则表达式
正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式,是用于匹配字符串中字符组合的模式。
Leophen
2019/08/23
8490
前端架构师之12_JavaScript正则表达式
正则表达式(Regular Expression,简称regexp)是一种描述字符串结构的语法规则。
张哥编程
2024/12/13
940
前端进阶必须知道的正则表达式知识
正则表达式(Regular Expression) 是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串,这个规则字符串用来表达对字符串的一种过滤逻辑。
石燕平
2019/12/03
7630
正则表达式
一、概述 正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用作按照“给定模式”匹配文本的工具。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 JavaScript通过内置对象RegExp支持正则表达式,有两种方式创建正则表达式对象。例如,如果我们想匹配字符串中所有"at"的实例,可以这么写: 第一种:使用字面量,以斜杠表示开始和结束。 var
小胖
2018/06/27
5630
js 怎么使用正则表达式-JavaScript正则表达式常用技巧
正则表达式是用于匹配字符串中字符组合的模式。在 中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、、、search 和 split 方法。正则表达式的掌握程度能粗略地看出程序员的技术底子,所以技术面试、编程竞赛等 都特别喜欢考察正则表达式。本篇就带你一起夯实一下 正则表达式的一些使用技巧:
宜轩
2022/12/29
1.8K0
js正则表达式(一)
版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/78017841
空空云
2018/09/27
4K0
js正则表达式(一)
js中的正则表达式(1)
对于正则,著称火星文字,见名知意主要它晦涩难懂,一直以来,看到它总是怕怕的,在平时,也只是简单的用用,其主要是靠搜,还有就是厚着脸皮求助各路大神了,遇到稍复杂些的正则,便无从下手了,令人头疼,即使写完了,过几月在回头看时,发现又看不懂那些符号是什么意思了,终归结底,还是自己使用得太少,认识得太浅,正则是一个非常强大能完成搜索和替换的文本工具,本文为初学者学习笔记心得,适用小白,对于正则,我也一直在学习当中,虽然很是枯燥,但是出去混迟早是要还的,欢迎路过的老师多提意见和指正
itclanCoder
2020/10/28
4.6K0
js中的正则表达式(1)
正则表达式
正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式,在 JavaScript中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。正则表达式可用于所有文本搜索和文本替换的操作。 ==那就开始吧~==
Qwe7
2022/04/01
2550
浅析JavaScript正则表达式
  正则表达式是一个描述字符模式的对象。JavaScript的RegExp类表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进行强大的模式匹配和文本检索与替换功能,JavaScript的正则表达式语法是Perl5的正则表达式语法的大型子集
Jack Chen
2018/09/14
1.6K0
浅析JavaScript正则表达式
JavaScript正则表达式
正则表达式是一个拆分字符串并查询相关信息的过程。 正则表达式通常被称为一个模式(pattern),是一个用简单方式描述或者匹配一系列符合某个语法规则的字符串。
奋飛
2019/08/15
9720
正则表达式总结 原
[总结] 主要区分match具有g和没有g的区别.然后没有g的时候与exec是等价的. 而exec返回的串类型不受g影响但具有g时候会驱动lastIndex可以模拟遍历所有匹配.可以与match具有g的时候等价 ,与循环配合使用全局匹配(如while(){}).
tianyawhl
2019/04/04
5010
正则表达式总结
                                                                            原
《现代Javascript高级教程》正则表达式的常见问题与练习
正则表达式是面试中经常被提及的主题之一,但很多人在面试中对于正则表达式的问题常常感到困惑。在本节中,我将通过一些常见问题和练习题目来帮助你更好地理解和掌握正则表达式的技巧。
linwu
2023/07/27
2040
相关推荐
JavaScript正则表达式入门知识详细介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验