《正则表达式必知必会(修订版)》笔记
正则表达式也是前端的一块非常重要的知识,静下心来花了一点时间把《正则表达式必知必会》翻阅了一遍,正则也就没有以前觉得那样难懂了。
因此,对于这本书也做了点小记录以供日后复习。我只做了目前觉得对自己有用的记录,日后若是需要补充再补充。
基本的元字符:
元字符 | 说明 |
. | 匹配任意单个字符 |
| | 逻辑或操作 |
[] | 匹配字符集合中的一个字符 |
[^] | 对字符集合求非 |
- | 定义一个区间 |
\ | 对下一个字符转义 |
数量元字符:
元字符 | 说明 |
* | 匹配前一个字符(子表达式)的零次或多次重复 |
*? | *的懒惰型版本 |
+ | 匹配前一个字符(子表达式)的一次或多次重复 |
+? | +的懒惰型版本 |
? | 匹配前一个字符(子表达式)的零次或一次重复 |
{n} | 匹配前一个字符(子表达式)的n次重复 |
{m, n} | 匹配前一个字符(子表达式)至少m次且至多m次重复 |
{n, } | 匹配前一个字符(子表达式)至少n次或更多次重复 |
{n, }? | {n, }的懒惰型版本 |
位置元字符:
元字符 | 说明 |
^ 或 \A | 匹配字符串的开头 |
$ 或 \Z | 匹配字符串的结束 |
\b | 匹配单词边界(开头和结尾);开头和结尾部分各需要一个\b |
\B | \b 的反义 |
特殊字符元字符:
元字符 | 说明 |
\d | 匹配任意数字字符 |
\D | \d 的反义,匹配任意非数字字符 |
\n | 换行符 |
\r | 回车符 |
\s | 匹配一个空白字符 |
\S | \s 的反义,匹配一个非空白字符 |
\w | 匹配任意字母数字或下划线字符 |
\W | \w 的反义,匹配任意非字母数字或非下划线字符 |
\x | 匹配一个十六进制数字 |
\0 | 匹配一个八进制数字 |
另外:()用来定义一个子表达式
顺带记录一些常用的正则表达式,也有助于对之前元字符的理解:
- 数字:^[0-9]*$
- n位数字:^\d{n}$
- 至少n位数字:^\d{n,}$
- m-n位数字:^\d{m,n}$
- 零和非零开头的数字:^(0|[1-9][0-9]*)$
- 非零开头的带两位小数的数字:^[1-9][0-9]*.[0-9]{2}$
- 浮点数:^(-?\d+)(.\d+)?$
- 汉字:^[\u4e00-\u9fa5]{0,}$
- 英文和数字:^[A-Za-z0-9]+$
- 长度为1到20的所有字符:^.{1,20}$
- 电子邮箱地址:^(\w+.)*\w@(\w+.)*+[A-Za-z]+$
- URL(仅匹配协议名,主机名,可选端口号,文件路径):https?://[-\w.]+(:\d+)?(/([\w/_.]*)?)?
- 完整的URL(还匹配了用户名和口令字,查询字符串):^https?://(\w*:\w*@)?[-\w.]+(:\d+)?(/([\w/_.]*(\?\S+)?)?)?$
- 手机号码:^1[3|4|5|7|8]\d{9}$
- QQ号:^[1-9]\d{4,}$
- 中国邮政编码:^[1-9]\d{5}$
- IP地址:(((\d{1,2})|(1\d{2}|)|(2[0-4]\d)|(25[0-5])).){3}((\d{1,2})|(1\d{2}|)|(2[0-4]\d)|(25[0-5]))