学习正则(第一天)字符匹配

352 阅读3分钟

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

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


01. 可以干什么?

  1. 匹配模式
  2. 匹配字符
  3. 匹配位置

02. 模糊匹配-横向匹配

待匹配的字符长度不固定,关联概念为量词({m,n}),表示某个字符重复出现m~n次后被命中。

正则:/hel{1,2}o/gm

image.png

说明:待匹配的字符串内容命中规则为heo中间包含最少1个l和做多2两个l

匹配正例:helo hello

匹配反例:heo``helllo

image.png

03. 模糊匹配-纵向匹配

待匹配的位字符串内容不固定,关联概念为字符组([abc]),表示某个位置出现的字符为给定返回中的一个后被命中。

正则:/ab[0-9]cd/gm

image.png

说明:待匹配的字符串内容命中规则为abcd中间包含一个数字。

匹配正例:ab1cd 匹配反例:abbcd ab12cd

image.png

04. 认识字符组

我们需要命中的字符在一个范围内的表示方法是:
  1. 指定几个,如:[abc]。

image.png

  1. 指定范围,如:[0-9],[a-z],[A-Z]。

image.pngimage.pngimage.png

  1. 包含特殊符号,如:[-ab],[ab-],[A-Z],均表示需要命中的内容为两个字符和-其中一个即可。

image.pngimage.pngimage.png

我们需要命中的字符不在这个范围内的表示方法是(使用^脱字符标记):
  1. 非指定几个,如:[^abc]。

image.png

  1. 非指定范围,如:[^0-9],[^a-z],[^A-Z]。

image.pngimage.pngimage.png

字符组简写表:
简写范围表示说明
\d[0-9]匹配数字
\D[^0-9]匹配非数字
\w[0-9a-zA-Z_]匹配单词字符
\W[^0-9a-zA-Z_]匹配非单词字符
\s[ \t\v\n\r\f]匹配空白符,空格,水平/垂直制表符,回车,换行,换页
\S[^ \t\v\n\r\f]匹配非空白符
.[^\n\r\u2028\u2029]匹配非回车,换行,行分隔符,段落分隔符

仔细看一下这几个单词,你一定能一次性全记住。我们通常会使用[\w\W]来表示任意字符,当然[\d\D],[\s\S],[^]也都可以,有的情况可以用.来充当任意字符💀。 image.png

05. 认识量词

量词决定了我们字符要被命中的次数。

量词(贪婪)表示量词(惰性)
{m,n}表示最少命中m次,最多命中n次。{m,n}?
{m,}表示最少命中m次。{m,}?
{m}表示命中次数为m次。{m}?
?表示命中一次或者不命中。??
+表示至少命中1次。+?
*表示命中任意次数,可以不命中。*?

贪婪模式:越多越好,多多益善。

惰性模式:够用就好,知足常乐。

上表中的图示: image.png

06. 认识管道符|

命中给的的模式中的一种即可,需要注意的是正则中的管道符也为惰性匹配,够用就好。 image.png

可以看到,似乎最符合的是右边的helloworld,但是优先命中左边的hello后就停止了,那我们想要匹配到最想要的那个怎么办呢,看下图后先思考一下🤔。

image.png

字符匹配我们就先学到这,赶紧抄起以前代码中的正则用下面的工具试试看吧,XDM🤭。


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

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

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

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