正則表達式是文字處理的瑞士刀,廣泛應用於驗證、搜尋、替換、解析等場景。從 Unix 工具(vi、sed、awk)、Perl、PHP、JavaScript 到 Java、C#、Python,幾乎所有語言都內建支援。掌握正則,能以極少代碼解決複雜字串問題。
正則寫在一對定界符之間,如 /pattern/。pattern 由普通字符與元字符組成,元字符賦予模式匹配靈活性。
| 元字符 | 說明 | 範例 | 匹配字串舉例 |
|---|---|---|---|
+ | 前一字符出現 1 次或多次 | /fo+/ | fo, foo, fool, football |
* | 前一字符出現 0 次或多次 | /eg*/ | e, eg, egg, easy |
? | 前一字符出現 0 次或 1 次 | /Wil?/ | Wi, Wil, Wilson |
{n,m} | 前一字符出現 n~m 次 | /jim{2,6}/ | jimmy, jimmmmmy |
\s | 單一空白字符(空格、Tab、換行) | /\s+/ | 一或多個空白 |
\S | 非空白字符 | /\S+/ | 非空白序列 |
\d | 數字 0-9 | /\d{3}-\d{4}/ | 電話格式 123-4567 |
\w | 字母、數字、底線 | /\w+/ | 單詞 |
\W | 非 \w 字符 | /\W+/ | 標點、空白等 |
. | 除換行外任意字符 | /a.b/ | aab, acb, a b |
| 定位符 | 含義 | 範例 | 匹配 |
|---|---|---|---|
^ | 字串開頭 | /^hell/ | hello, hellhound |
$ | 字串結尾 | /ar$/ | car, bar, ar |
\b | 單詞邊界(開頭或結尾) | /\bbom/ | bomb, bom (開頭) |
\B | 非單詞邊界 | /man\B/ | human, woman (結尾) |
[A-Z] 大寫字母[a-z] 小寫字母[0-9] 數字[a-zA-Z0-9] 英數字([a-z][A-Z][0-9])+ 群組重複:必須同時包含大小寫與數字|:/to|too|2/ 匹配 "to" 或 "too" 或 "2"[^...]:/[^A-C]/ 匹配非 A/B/C 的任意字符\:/Th\*/ 匹配字面 "Th*" 而非 "The"// 簡易版:允許常見格式
/^[\w.-]+@[\w.-]+\.\w{2,}$/
// 較嚴格(RFC 5322 簡化)
/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+$/
const emailRegex = /^[\w.-]+@[\w.-]+\.\w{2,}$/;
function validateEmail(email) {
return emailRegex.test(email);
}
console.log(validateEmail('user@example.com')); // true
console.log(validateEmail('invalid')); // false
*、+ 預設貪婪,加 ? 變惰性(如 .*?)。() 可供後向引用 \1、$1 或替換使用。i 忽略大小寫、g 全域匹配、m 多行模式。(a+)+)導致災難性回溯。正則表達式看似晦澀,實則邏輯嚴密。建議從常用場景(驗證、擷取、替換)切入,配合線上測試工具(如 regex101.com)練習,漸進掌握這項終身受用的技能。