正規表達式完全教學:從入門到精通
什麼是正規表達式?
正規表達式(Regular Expression,簡稱 Regex) 是一種用於描述字串匹配模式的工具。它可以用來搜尋、替換和驗證文字,是程式開發中不可或缺的技能。
基礎語法
字元匹配
| 語法 | 說明 | 範例 |
|---|---|---|
. | 匹配任意單個字元 | a.c 匹配 "abc"、"a1c" |
\d | 匹配數字 | \d{3} 匹配 "123" |
\w | 匹配字母、數字、底線 | \w+ 匹配 "hello_123" |
\s | 匹配空白字元 | \s+ 匹配空格和換行 |
量詞
| 語法 | 說明 | 範例 |
|---|---|---|
* | 0 次或多次 | ab*c 匹配 "ac"、"abc"、"abbc" |
+ | 1 次或多次 | ab+c 匹配 "abc"、"abbc" |
? | 0 次或 1 次 | colou?r 匹配 "color"、"colour" |
{n} | 恰好 n 次 | \d{4} 匹配 4 位數字 |
{n,m} | n 到 m 次 | \d{2,4} 匹配 2-4 位數字 |
錨點
| 語法 | 說明 |
|---|---|
^ | 字串開頭 |
$ | 字串結尾 |
\b | 單字邊界 |
常用正規表達式範例
電子郵件驗證
regex
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
手機號碼(台灣)
regex
^09\d{8}$
^09\d{8}$
網址驗證
regex
^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$
^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)$
IP 位址
regex
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
密碼強度(至少 8 位,含大小寫和數字)
regex
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$
進階技巧
分組與捕獲
使用 () 建立捕獲組,可以提取匹配的子字串:
javascript
const match = "2024-01-15".match(/(\d{4})-(\d{2})-(\d{2})/);
// match[1] = "2024", match[2] = "01", match[3] = "15"
const match = "2024-01-15".match(/(\d{4})-(\d{2})-(\d{2})/);
// match[1] = "2024", match[2] = "01", match[3] = "15"
非捕獲組
使用 (?:) 建立不捕獲的分組:
regex
(?:https?|ftp):\/\/
(?:https?|ftp):\/\/
前瞻和後顧
- 正向前瞻
(?=...):匹配後面跟著指定模式的位置 - 負向前瞻
(?!...):匹配後面不跟著指定模式的位置
實用工具推薦
使用我們的 Regex 測試器 [blocked] 可以即時測試正規表達式,支援即時匹配高亮和常用模式範本,是學習和除錯 Regex 的好幫手。



