正則表達式測試與除錯技巧:從入門到寫出高效正則
文字(更新於 2026年4月23日)
為什麼要線上測試正則?
正則表達式語法複雜、難以一次寫對。線上測試工具可以:
- 即時匹配高亮:輸入正則和文字,立即看到匹配結果
- 分組擷取視覺化:清晰顯示每個擷取組的內容
- 多旗標測試:快速切換
g/i/m/s旗標 - 錯誤即時回饋:語法錯誤立即標紅提示
正則語法速查
基礎匹配
| 語法 | 含義 | 範例 | 匹配 |
|---|---|---|---|
. |
任意字元(除換行) | a.c |
abc, a1c |
\d |
數字 | \d{3} |
123 |
\w |
字母/數字/底線 | \w+ |
hello_1 |
\s |
空白字元 | a\sb |
a b |
[abc] |
字元集 | [aeiou] |
a, e, i |
[^abc] |
排除字元集 | [^0-9] |
非數字 |
量詞
| 語法 | 含義 | 貪婪/非貪婪 |
|---|---|---|
* |
0 次或多次 | a* / a*? |
+ |
1 次或多次 | a+ / a+? |
? |
0 次或 1 次 | a? / a?? |
{n,m} |
n 到 m 次 | a{2,4} |
分組與引用
| 語法 | 含義 | 範例 |
|---|---|---|
(abc) |
擷取組 | (\d{4})-(\d{2}) |
(?:abc) |
非擷取組 | (?:http|https):// |
\1 |
反向引用 | (\w)\1 匹配 aa, bb |
(?<name>) |
命名組 | (?<year>\d{4}) |
使用線上正則工具
步驟
- 開啟 正則表達式測試工具
- 在正則輸入框中輸入正則表達式
- 在測試文字框中輸入待匹配文字
- 選擇需要的旗標(
g全域 /i忽略大小寫 /m多行) - 查看匹配結果和高亮
常用旗標
| 旗標 | 含義 | 預設 |
|---|---|---|
g |
全域匹配(找所有) | 否(只找第一個) |
i |
忽略大小寫 | 區分大小寫 |
m |
多行模式 | 單行 |
s |
. 匹配換行符 |
. 不匹配換行 |
u |
Unicode 模式 | — |
常見陷阱
1. 貪婪匹配問題
文字: <div>hello</div><div>world</div>
正則: <div>.*</div>
結果: <div>hello</div><div>world</div> ← 整段被匹配!
修復: <div>.*?</div> ← 非貪婪,匹配兩個
2. 回溯災難
// 危險:巢狀量詞導致指數級回溯
/^(a+)+$/.test('a'.repeat(30) + 'b');
// 這個測試可能需要數秒甚至卡死
// 修復:避免巢狀量詞,或使用原子組
3. 忘記跳脫特殊字元
正則: price.com ← . 匹配任意字元
修復: price\.com ← 只匹配 price.com
實用正則範例
| 場景 | 正則表達式 |
|---|---|
| 手機號 | ^1[3-9]\d{9}$ |
| 信箱 | ^[\w.-]+@[\w-]+\.[\w.]+$ |
| URL | ^https?:\/\/[\w.-]+(?:\.[\w]+)+[/\w.-]*$ |
| IP 位址 | ^(\d{1,3}\.){3}\d{1,3}$ |
| 日期 YYYY-MM-DD | `^\d{4}-(?:0[1-9] |
| 中文字元 | [\u4e00-\u9fa5]+ |
常見問題
正則在工具裡匹配但程式碼裡不匹配?
檢查是否遺漏了 g 旗標,或者程式碼中的字串包含換行符但正則沒有 m/s 旗標。
如何匹配多行文字?
使用 s 旗標讓 . 匹配換行符,或使用 [\s\S] 代替 .。
總結
正則表達式是開發者的必備技能,但語法複雜容易出錯。使用 正則表達式測試工具 可以即時驗證、快速除錯,大幅提升開發效率。工具庫還提供 文字尋找取代、文字對比 等配套工具,一站滿足文字處理需求。
#正则表达式#Regex#文本处理#教程#调试