正则表达式基础
以下所列知识点基于Javascript支持的正则表达式。
序言
- 把必须匹配的情况考虑周全并写出一个匹配结果符合预期的正则表达式很容易,但把不需要匹配的情况也考虑周全并确保它们都将被排除在匹配结果以外往往要困难的多。
名词解释
- 元字符:metacharacter,表示这个字符在正则表达式里有特殊含义,而不是字符本身含义。元字符大致可以分为两种:一种是用来匹配文本的(比如.),另一种是正则表达式的语法所要求的(比如 [ 和 ] )。
- 类元字符(字符类):字符集合(匹配多个字符中的一个)是最常见的匹配形式,而一些常用的字符集合可以用特殊元字符来代替。这些元字符匹配的是某一类别的字符(术语称之为“字符类“)。类元字符并不是必不可少的东西(你总是可以通过逐一列举有关字符或是通过定义一个字符区间的办法来匹配某一类字符),但用他们构造出来的正则表达式简明易懂,在实践中很有用。
- 子表达式:子表达式是一个更大的表达式的一部分;把一个表达式划分为一系列子表达式的目的是为了把那些子表达式当做一个独立元素来处理。子表达式必须用(和)括起来。子表达式允许嵌套,实际上,子表达式允许多重嵌套,这种嵌套的层次在理论上没有限制,但在实际工作中还是应该遵循适可而止的原则。
- “贪婪型”元字符:像 +,* 这样的元字符,它们在进行匹配时的行为模式是会尽可能地从一段文本的开头一直匹配到这段文本的结束,而不是从这段文本的开头匹配到第一个匹配时为止。
- “懒惰型”元字符:该类元字符主要是防止过度匹配,与“贪婪型”元字符正好相反,它们在进行匹配时会从这段文本的开头匹配到第一个匹配。“懒惰型”元字符写法只需要在“贪婪型”元字符后面加上?即可。例如 +?,*?
- 分行匹配模式:分行匹配模式将使得正则表达式引擎把行分隔符当做一个字符串分隔符来对待。在分行匹配模式下,^不仅匹配正常的字符串开头,还将匹配行分隔符(换行符)后面的开始位置(这个位置是不可见的);类似的,$不仅匹配正常的字符串结尾,还将匹配行分隔符后面的结束位置。
参数 | 参数说明 | 示例 |
g | (意思是“global”,全局),标志将返回一个包含着所有匹配的结果数组。 | /ab/g,将返回所有ab的一个数组 |
i | 强制进行一次不区分大小写的搜索 | /aB/i,可匹配ab,aB,Ab,AB |
. | 可以匹配任何一个单个的字符 | |
\ | 转义字符 每个元字符都可以通过给他加上有个\前缀的办法来转义,如此得到的转义序列将匹配那个字符本身而不是它特殊的元字符的含义。 | 比如 . 在正则表达式中代表任意单个字符,\. 则代表 . |
[ ] | 元字符,用来定义一个字符集合,在使用[ ]定义的字符集合里,这两个元字符之间的所有字符都是该集合的组成部分,字符集合的匹配结果是能够与该集合里的任意一个成员相匹配的文本。[ 和 ]不匹配任何字符,他们只负责定义一个字符集合。 | /[abc]d/,可匹配ad,bd,cd |
-(连字符) | 元字符,定义字符区间,字符区间的首、尾字符可以是ASCII字符表里的任意字符。 注意:-(连字符)是一个特殊的元字符,作为元字符他只能用在 [ 和 ] 之间。在字符集合以外的地方,-只是一个普通字符,只能与-本身相匹配,不需要被转义。 | /[0-9]/,可匹配0到9之间的任意一个数字 |
^ | (多用途)元字符,只有当^被放在一个字符集合里([ 和 ]之间)并紧跟在 [ 的后面,才表示对一个字符集合进行取非匹配 注意:^的效果将作用于给定字符集合里的所有字符或字符区间,而不是仅限于紧跟在^字符后面的那一个字符或字符区间 如果是在一个字符集合的外面并位于一个模式的开头,^将匹配字符串的开头。 | /[^0-9]/,取非,匹配一个不是数字的字符 /^[0-9].*/,匹配以数字开头的文本 |
$ | 元字符,用来定义字符串结尾 | |
[\b] | (空白)元字符,回退(并删除)一个字符(BackSpace键) | |
\f | (空白)元字符,换页符 | |
\r | (空白)元字符,回车符 | |
\n | (空白)元字符, 换行符 | |
\t | (空白)元字符,制表符(Tab)键 | |
\v | (空白)元字符, 垂直制表符 | |
\d | 类元字符,任何一个数字字符(等价于[0-9]) | |
\D | 类元字符, 任何一个非数字字符(等价于[^0-9]) | |
\w | 类元字符,任何一个字母数字字符(大小写均可)或下划线(等价于[a-zA-Z0-9_ ]) | |
\W | 类元字符,任何一个非字母数字或非下划线字符(等价于[^a-zA-Z0-9_ ]) | |
\s | 类元字符,任何一个空白字符 (等价于[\f\n\r\t\v]) | |
\S | 类元字符,任何一个非空白字符 (等价于[^\f\n\r\t\v]) | |
+ | (“贪婪型”)元字符,放在一个字符(或字符集合)后面,匹配一个或多个字符(至少一个,不匹配零个字符的情况); | /[0-9]+/,匹配一个或多个数字 |
* | (“贪婪型”)元字符,放在一个字符(或一个字符集合)后面,匹配该字符(或该字符集合)连续出现零次或多次的情况。 | |
? | 元字符,匹配一个字符(或字符集合)的零次或一次出现,最多不超过一次。 | |
{ } | (“贪婪型”)元字符,用来设置一个字符(或字符集合)的重复次数 {m} 或重复次数区间 {m,n};还可以设置最少重复次数 {m, },即最少重复m次 | |
() | 元字符,用来定义子表达式;如果需要匹配(和)本身,就必须使用它的转义序列 \( ,\) | |
\b | 元字符,用来匹配一个单词的开始或结尾 注意:\b 匹配且只匹配一个位置,不匹配任何字符。例如,用 \bcat\b匹配到的字符串的长度是3 (c 、a 、t ),不是5个字符。 | |
\B | 元字符,不匹配一个单词边界 | |
?m | 元字符,用来启用分行匹配模式 |
正则表达式运算符优先级顺序
\ | 转义符 |
( ),(?:),(?=),[ ] | 括号和中括号 |
*,+,?,{n},{m,n},{m, } | 重复匹配限定符 |
^,$,/ 其他元字符、字符 | 定位点和序列 |
- 特别说明
- 在正则表达式里,\字符永远出现在一个有着特殊含义的字符序列的开头,这个序列可以有一个或多个字符构成。
- 一般来说,当在字符集合[ ]里使用的时候,像 . 和 +,? 这样的元字符将被解释为普通字符,不需要被转义--但转义了也没坏处。/[\w.]/ 与 /\w\./的使用效果是一样的。
- \b , b是英文boundary(边界) 的首字母。\b 匹配的是这样一个位置,这个位置位于一个能够用来构成单词的字符(字母、数字和下划线,也就是与\w相匹配的字符 ) 和一个不能用来构成单词的字符 ( 也就是与\W相匹配的字符 ) 之间。
相关推荐
wangzhaotongalex 2020-10-20
rechanel 2020-11-16
cshanzhizi 2020-10-16
luofuIT成长记录 2020-09-22
taomengxing 2020-09-07
MaggieRose 2020-08-19
jyj00 2020-08-15
MaggieRose 2020-07-04
modaiairen 2020-06-28
ziggurat 2020-06-28
JnX 2020-06-27
jyj00 2020-06-26
山水沐光 2020-06-25
shqhope 2020-06-23
eroshn 2020-06-21
码墨 2020-06-16
wyq 2020-11-11
TLROJE 2020-10-26
风雨断肠人 2020-10-13