轻松掌握正则表达式(4)

时间:2021-03-29 16:19:17

三 、 使用元字符

正则表达式中的元字符一般分为两种:第一种是匹配字符的,比如 .(点);另一种是为了满足语法的需要,比如 [ ]

1 、对特殊字符进行转义

有时候我们需要从文本中匹配到一些特殊的字符。但是这些字符在正则表达式中哟时候代表一些特殊含义,比如 [ 和 ] 、 .(点)等,这些字符就是正则表达式中的元字符。
当你需要匹配一个特殊的字符的时候,你需要对字符进行转义 ,即用 \ (反斜杠) 加上你要匹配的字符。例如: [ ( 匹配字符[ )

注意:

配对的元字符(如 [ 和 ])不用做元字符的时候必须转义,否则正则表达式会抛出错误。在程序中会失效。

2 、匹配空白字符

有时候我们需要将文本中的空白的符号匹配出来,比如换行符、换页符、制表符等。但是这在正则表达式中是不好直接输入,所有会用到表格中的这些字符

字符 含义
[\b] 回退并删除一个字符
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\v 垂直制表符

案例演示:

文本:

THIS IS REGX

THIS IS REGX TOO

正则表达式:

\r\n

结果:
我:emmmmmmmmm……相信我,是匹配到了的,就是没法显示……

\r\n组合使用的含义是匹配一个回车一个换行,匹配到之后你可以替换掉它们。

3、匹配特定的字符类别

在正则中哟一种字符,它们代表了一个字符集合,比如 \d 等价于[0-9]、\D等价于[^0-9],这些字符叫做字符类。类元字符的使用可以简化正则表达式

类元字符 等价表达式 说明
\d 等价于 [0-9] 任何一个0-9的数字
\D 等价于 [^0-9] 任何一个非0-9的数字
\w 等价于[a-zA-z_] 任何一个大小写的字符或下划线
\W 等价于[^a-zA-z_] 任何一个非大小写的字符和下划线
\s 等价于[\f\n\r\t\v] 任何一个空白的字符
\S 等价于[^\f\n\r\t\v] 任何一个非空白的字符

案例演示:

文本:

11223
344abc
1a2b3c
4d5s6p
7 8w9t

正则表达式:

\d\w\d\w\d\w

结果:

1a2b3c
4d5s6p

4 、使用POSIX字符类

什么是POSIX字符类呢,POSIX字符类是许多正则表达实现都指出的一种简写形式。
注意,我说的是许多,不是所有JavaScript就不支持在正则表达式里使用POSIX字符类

字符类 等价表达式 说明
[:alnum:] [a-zA-Z0-9] 任何一个字母或数字
[:alaph:] [a-zA-Z] 任何一个字母
[:black:] [\t ] (\t后有一个空格) 空格或制表符
[:contrl:] 代表ASCII码0-31 和127 请参照ASCII码控制字符
[:digit:] [0-9] 任意一个数字
[:xdigit:] [a-fA-F0-9] 十六进制数
[:print:] 我:emmmmmm……太多了 任何一个能打印的字符
[:graph:] 我:emmmmmm……也不少 和print差不多,但是不包括空壳
[:lower:] [a-z] 任何一个小写字母
[:upper:] [A-Z] 任何一个大写字母
[:punct:] [^[[:alnum:][:contr:]]] 既不属于[:alnum:]也不属于[:contr:]的字符
[:space:] [^\f\n\r\t\v] 任何一个空白的字符

案例演示:


我们来看一段HTML的代码:

<body bgcolor="#333fff" text="#FFFFFF">
</body>

现在你想获取这个网页中的RGB值(RGB值,用一个十六进制数字给出的红、绿、蓝三基色的组合值,计算机可以根据RGB值将文字、图片、显示为这三种颜色按照一定比例调和出的颜色)

正则表达式

#[[:xdigit:]]{6}

结果:

是不是不知道{6}是什么意思? {6} 的意思是对前边的字符集中的数字重复匹配6次,具体的内容会在下篇博客中讲解(预知后事如何,且听下回分解)。

#333fff
#FFFFFF

总结

(1)如果要匹配元字符,必须对元字符进行转义
(2) 匹配空白字符,看上边的表格OK了
(3) 匹配特定的字符类,我们之前匹配一个字符类用到的是字符集合的方式,比如我们要匹配数字会这样写[0-9] ,今天认识到了字符类 \d就可以少打几个字符了,更重要的是提高了正则表达式的可读性。类元字符还有 : \D 、\w、\W 、\s 、\S等,你都知道是什么意思吗?
(4) 还记得POSIX字符类有哪些吗?记住全部优点困难的话,就找几个自己常用的记住吧,能提高你编写正则的效率的呢,但是要注意你使用的正则表达式的实现是不是支持POSIX字符类