[TOC]
---
### 一、正则语法的分类
**1. 普通字符**
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
**2. 非打印字符**
非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列,例如 `\f \n \r \s \S \t \v` 等。
**3. 特殊字符**
所谓特殊字符,就是一些有特殊含义的字符,如上面说的 runoo*b 中的 *,简单的说就是表示任何字符串的意思。如果要查找字符串中的 * 符号,则需要对 * 进行转义,即在其前加一个 \: runo\*ob 匹配 runo*ob。
许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。
**4. 限定符**
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。
**5. 定位符**
定位符使您能够将正则表达式固定到行首或行尾。它们还使您能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。
定位符用来描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。
### 二、贪婪模式和非贪婪模式
- 贪婪模式:指尽可能多的匹配结果,例如 `* ? {1} {1,} {1,4}`
- 非贪婪模式:指尽可能少的匹配结果例如 `*? ?? {1}? {1,}? {1,4}?`
### 三、练习
1. 匹配邮箱
```JavaScript
let reg = /^([0-9a-zA-Z]+)@[0-9a-zA-Z]+\.\w+$/
```
2. 匹配某元素中的内容,如 `<div>adsf</div>` 中的 `adsf`
```JavaScript
let reg = /<(\w+)>(\w*)(<\/\1>)/ig
```
3. 匹配http (https)网址
```JavaScript
let reg= /^(http|https):\/\/(www)?.\w+.[a-zA-Z]+$/
```
4. 匹配汉字
```JavaScript
let reg= /[\u4e00-\u9fa5]/
```
5. 匹配非字母的任意字符
```JavaScript
let reg= /[^a-zA-Z]/
```