学习正则(第三天)看懂括号

简介: 学习正则(第三天)看懂括号

对于编程来说空号的作用往往就是用来分组的,比如说在写一些比较长的条件判断的时候经常会用到,我们一起来看一下正则表达式中的括号() 的作用吧。


01. 分组


看一下下图中(1)中的正则,我们匹配连续3次出现的字符b,那如果我们的变换一下,比如说我们待匹配的字符串为:abcabcdabcde,我们要匹配连续的abc要怎么办呢?这里我们就需要用到本篇要说到的括号了,请看下图中(2)的正则:

1.png

2.png


02. 分支结构


使用括号标记的子表达式同样提供了多选的支持即通过管道符来实现,在上图(2)中的两行字符的区别就是第一行为2组连续的abc,第二行为3组连续的abc,我们通过增加一个分组的形式来讲第一行进行匹配:

3.png


03. 使用分组提取/替换数据


这里我们沿用正则表达式迷你书v1.1版的案例(日期)相关,如常见的日期格式通常是yyyy-mm-dd,我们用正则表示一下,请看下图:

4.png

5.png

我们接着来增加括号准备提取数据,请接着看图,图片较大请按第四象限和下图(2)的可视化图:

6.png

7.png

我们接着用代码来演示一下提取结果:

8.png我们再借助Js的replace函数来替换成yyyy/mm/dd的形式:9.png


04. 反向引用


这里的反向引用指的是我们可以通过标识来引用正则之前出现过的分组,所以称之为反向引用。

下图中的正则可以正确命中字符串2021-10-31 12:20:302021/10/31 12:20:30,但是有点意外的是2021-10/31 12:20:30这样的字符串照样能被命中,我们要怎么样才能使得前后年月和月天之间的符号保持一致呢?这里就用到了我们这小节的反向引用。10.png

加入反向引用:

11.png

12.png注意:切记是和前面引用内容一致的哦,比如说:\d{4}(-|\/)\d{2}\1\d{2}[\s]{1}\d{2}(:)\d{2}\2\d{2}。还要如果不能搞清楚分组情况的话可以通过可视化页面来辅助分析一下。 如果匹配的分组不存在,那么只会匹配反向引用的字符本身。


05. 非捕获情况


即不在API里面引用,也不在正则里反向引用的话我们就需要使用到非捕获括号(?:p)(?:p|p|p)

13.png

可以看到我们原来的分组2变成了分组1,而原来的分组1变成了原始的括号的作用。

14.png


欢迎关注我的公众号“前端小鑫同学”,原创技术文章第一时间推送。

括号分组我们就先学到这,赶紧抄起以前代码中的正则用下面的工具试试看吧,XDM🤭。以上内容学习自老姚的正则表达式迷你书v1.1版,因部分内容还没能理解,还请阅读原著多多学习。



相关文章
|
JavaScript 前端开发
JS正则表达式:常用正则手册/RegExp/正则积累(一)
JS正则表达式:常用正则手册/RegExp/正则积累
120 1
|
数据采集 Java 机器人
根据正则表达式截取字串符,这个办法打败99%程序员
作为一名程序员,常常会在以下情况下使用函数功能根据正则表达式截取字符串:
|
存储 JavaScript 安全
JS正则表达式:常用正则手册/RegExp/正则积累(二)
JS正则表达式:常用正则手册/RegExp/正则积累
102 0
|
5月前
|
IDE 开发工具 Python
python语法中括号不匹配处理
【7月更文挑战第8天】
169 2
|
PHP 开发者
你见过这些正则表达式中奇奇怪怪的匹配模式吗 _ 贪婪匹配、懒惰匹配 、禁止贪婪匹配!
一篇文章让你清楚的了解正则表达式中奇奇怪怪的匹配模式-- 贪婪匹配、懒惰匹配 、禁止贪婪匹配!
88 1
你见过这些正则表达式中奇奇怪怪的匹配模式吗 _ 贪婪匹配、懒惰匹配 、禁止贪婪匹配!
|
7月前
leetcode代码记录(有效的括号
leetcode代码记录(有效的括号
38 1
|
7月前
|
Java
每日一刷《剑指offer》字符串篇之正则表达式匹配
每日一刷《剑指offer》字符串篇之正则表达式匹配
74 0
每日一刷《剑指offer》字符串篇之正则表达式匹配
|
JavaScript
剑指offer 18. 正则表达式匹配
剑指offer 18. 正则表达式匹配
58 0
|
算法
LeetCode 32最长有效括号(困难)
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。
98 0
LeetCode 32最长有效括号(困难)
|
算法 Go
算法练习第四天——有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。