元字符
空白字符
字符 | 描述 |
---|---|
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符 |
表示位置的字符
字符 | 描述 |
---|---|
^ | 匹配输入字符串开始的位置 |
$ | 匹配输入字符串结尾的位置 |
常用
字符 | 描述 |
---|---|
\d | 匹配一个数字字符。等价于 [0-9] |
\D | 匹配一个非数字字符。等价于 [^0-9] |
\w | 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’ |
\W | 匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’ |
\s | 匹配任何空白字符,包括空格、制表符、换页符 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v] |
. | 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用像”(. |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配”never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’ |
\B | 与 \b 相反:er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’ |
Demo
1 | # 匹配以ing结尾的单词 |
1 | # 匹配11位数的中国手机号 |
区间
字符 | 描述 |
---|---|
[0-9] | 匹配0-9之间的数字 |
[A-Z] | 匹配A-Z之间的数组,也可以组合 [A-Za-z0-9] |
限定符
字符 | 描述 |
---|---|
* | 匹配前面的 子表达式 >=0次,例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,} |
+ | 匹配前面的 子表达式 >=1次,例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,} |
? | 匹配前面的 子表达式 0/1次,例如,”do(es)?” 可以匹配 “do” 、 “does” 中的 “does” 、 “doxy” 中的 “do” 。? 等价于 {0,1} |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o |
{n,} | n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’ |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}” 将匹配 “fooooood” 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格 |
- 上面学习了:区间、限定符,结合元字符,有了他们三种
1
2# 匹配九位数的qq邮箱
[0-9]{9}@qq.com
1 | # 身份证号 |
1 | # ip地址 |
普通字符 & 转义
1 | # 例子 |
@ 就是普通字符,标识必定会出现的内容。 比如:匹配域名 juejin.im,你完全可以用
1
https://juejin.im
但由于符号 /、.、(、) 等等在正则是特殊字符,所以需要用转义符 \ 转义
1
https:\/\/juejin\.im
接下来说一些正则表达式中的一些重要概念喽
- 子表达式
1
用圆括号组成一个比较复杂的匹配模式,那么一个圆括号的部分我们可以看作是一个子表达式。
- 举例 var reg=/(\d)([a-z]*)/gi
- (\d)就是第一个子表达式
- ([a-z]) 是第二个子表达式