核心元字元速查表
| 符號 | 含義 | 示例匹配 |
| `.` | 任意字元 (除換行) | `a.b` → `acb`, `a b` |
| `\d` | 數字 `[0-9]` | `\d{3}` → `123` |
| `\D` | 非數字 | `\D+` → `abc` |
| `\w` | 單詞字元 `[A-Za-z0-9_]` | `\w+` → `var_1` |
| `\W` | 非單詞字元 | `\W+` → `@#$` |
| `\s` | 空白 (空格、Tab、換行) | `\s+` → ` \n` |
| `\S` | 非空白 | `\S+` → `hello` |
| `^` | 行首 (多行模式下每行首) | `^Hello` |
| `$` | 行尾 | `world$` |
| `\b` | 單詞邊界 | `\bcat\b` → `cat` 不匹配 `category` |
| `|` | 或 | `cat|dog` |
| `()` | 分組/捕獲 | `(\d{4})-(\d{2})` |
| `(?:)` | 非捕獲分組 | `(?:ab)+` |
| `(?=)` | 正向前瞻 | `\w+(?=\d)` → 匹配後面是數字的單詞 |
| `(?!)` | 負向前瞻 | `\w+(?!\d)` |
量詞 (貪婪/惰性/佔有)
| 量詞 | 含義 | 惰性版 |
| `*` | 0 次或多次 | `*?` |
| `+` | 1 次或多次 | `+?` |
| `?` | 0 次或 1 次 | `??` |
| `{n}` | 恰好 n 次 | `{n}?` |
| `{n,}` | 至少 n 次 | `{n,}?` |
| `{n,m}` | n 到 m 次 | `{n,m}?` |
修飾符 (Flags)
// 字面量寫法
/pattern/gim
// 構造函數寫法
new RegExp('pattern', 'gim')
| 標誌 | 名稱 | 效果 |
| `g` | Global | 全域匹配 (不停在第一次) |
| `i` | IgnoreCase | 忽略大小寫 |
| `m` | Multiline | `^$` 匹配每行首尾 |
| `s` | DotAll (ES2018) | `.` 匹配含換行 |
| `u` | Unicode (ES2015) | 正確處理 Unicode 代理對 |
| `y` | Sticky (ES2015) | 從 `lastIndex` 緊貼匹配 |
JS 常用 API
const regex = /\d+/g;
const str = '年 2024 月 01 日';
// 1. test() - 布爾判斷
regex.test(str); // true
// 2. exec() - 單次匹配詳情 (配合 g 迭代)
let match;
while ((match = regex.exec(str)) !== null) {
console.log(match[0], match.index); // 2024 3, 01 10
}
// 3. match() - 字串方法
str.match(regex); // ['2024', '01'] (有 g 返回匹配陣列)
str.match(/\d+/); // ['2024', index: 3, input: ..., groups: undefined] (無 g 返回詳情)
// 4. replace() - 替換
str.replace(/\d+/g, '***'); // '年 *** 月 *** 日'
str.replace(/(\d{4})-(\d{2})/, '$2/$1'); // 分組引用
// 5. split() - 分割
'1,2;3'.split(/[,;]/); // ['1','2','3']
// 6. matchAll() (ES2020) - 迭代器獲取所有分組
[...str.matchAll(/(\d{4})-(\d{2})/g)];
實用模式庫 (可直接複製)
// 手機號 (中國大陸)
/^1[3-9]\d{9}$/
// Email (簡易 RFC 5322)
/^[^\s@]+@[^\s@]+\.[^\s@]+$/
// URL (HTTP/HTTPS)
/^https?:\/\/[^\s/$.?#].[^\s]*$/i
// IPv4
/^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/
// 日期 YYYY-MM-DD
/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/
// 中文字符
/[\u4e00-\u9fa5]+/
// HTML 標籤 (簡易)
/<[^>]+>/g
// 密碼強度 (8-16 位,含大小寫數字特殊符號)
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,16}$/
調試神器
regex101.com — 即時解釋、解釋步驟、單元測試、代碼生成 (JS/Python/Go/...)。