[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]/
```