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

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~


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

01. 分组

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

image.png

image.png

02. 分支结构

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

image.png

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

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

image.png

image.png

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

image.png

image.png

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

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

04. 反向引用

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

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

加入反向引用: ​

image.png

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

05. 非捕获情况

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

image.png

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

image.png


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

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

推荐一个自己的导航网站:https://it200.cn/

正则编写测试网站:https://regex101.com/

正则表达式图示:https://jex.im/regulex/

posted @   前端小鑫同学  阅读(21)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示