
大學第一次學前端做期末專案時,為了驗證一個 Email 格式,我寫了滿滿的 if-else 去檢查 @ 和點號的位置,結果隨便輸入一個字串還是漏洞百出。後來才知道,那些讓我寫到崩潰的字串判斷,其實只需要一行正規表示式 (Regular Expression) 就能優雅解決。
雖然這串「外星符號」第一眼看起來很嚇人,但是掌握規則後,它就是你處理字串最強大的武器。
簡單來說,Regular Expression 就是一種定義搜尋模式的語法。你可以把它想像成進階版的「尋找與取代」,用來檢查字串是否符合特定格式。
在 JavaScript 中,建立 RegExp 有兩種方式:
接著就來看看如何使用這兩種方式來建立 RegExp 吧!
js1const regex = new RegExp("cat", 'gi');
js1const regex = /cat/gi;
常見 flag 包含:
. 能多 match 換行符號lastIndex 開始比對注意事項
/.../new RegExp()回傳是否成功 match
js1const regex = /cat/i; 2 3console.log(regex.test("My Cat")); // true 4console.log(regex.test("Dog")); // false
常見用途
RegExp vs String API
includes()、startsWith()、endsWith() 可取代簡單判斷取得 match 到的結果(包含 group 資訊)
js1const datePattern = /(\d{4})-(\d{2})-(\d{2})/; 2const result = datePattern.exec("Today is 2025-11-14"); 3 4console.log(result[0]); // "2025-11-14" 5console.log(result[1]); // "2025" 6console.log(result[2]); // "11" 7console.log(result[3]); // "14"
常見用途
g flag 來逐次擷取結構化資料RegExp vs String API
回傳 match 到的內容
若沒有加 g flag,回傳第一個 match 到的結果。若加上 g flag,則會回傳所有結果:
js1const input = "cat5566"; 2input.match(/\d/); 3// ["5"] 4 5const input2 = "cat55dog66"; 6input2.match(/\d+/g); 7// ["55", "66"]
常見用途
g flag 取得所有符合字串RegExp vs String API
indexOfmatch(/.../g)js1const input = "cat:55.dog:66"; 2[...input.matchAll(/(\w+):(\d+)/g)]; 3// [["cat:55", "cat", "55"], ["dog:66", "dog", "66"]]
matchAll 會回傳一個 RegExpStringIterator,有幾格常見得的用法:
next():迭代。value:取值。done:判斷是否已經到最後了。常見用途
RegExp vs String API
替換字串內容
基本替換:
js1const input = "cat5566"; 2input.replace(/\d/, "*"); 3// "cat*566"
全域替換:
js1const id = "123-456-789"; 2id.replace(/\d/g, "*"); 3// "***-***-***"
使用 group 來重組字串:
js1const date = "2025-11-30"; 2date.replace(/(\d{4})-(\d{2})-(\d{2})/, "$3/$2/$1"); 3// "30/11/2025"
也能使用 callback 動態生成替換內容:
js1const input = "cat66"; 2input.replace(/\d+/g, (match) => Number(match) * 2); 3// "cat132"
常見用途
RegExp vs String API
replaceAll()使用 RegExp 拆分字串
js1const fruits = "apple,banana;grape"; 2fruits.split(/[,;]/); 3// ["apple", "banana", "grape"]
常見用途
RegExp vs String API
js1const number = "12345"; 2/^\d+$/.test(number); // true
js1const email = "test@example.com"; 2/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email); // true
js1const url = "https://www.example.com/page?id=1"; 2const domain = url.match(/https?:\/\/([^\/]+)/)[1]; 3 4console.log(domain); // "www.example.com"
js1const input = "hello world JS"; 2input.replace(/\s+/g, " "); 3// "hello world JS"
| 語法 | 說明 |
|---|---|
. | 匹配任意字元(不含換行) |
\d | 數字 |
\w | 英數字或底線 |
\s | 空白 |
^ | 開頭 |
$ | 結尾 |
* | 0 次或以上 |
+ | 1 次或以上 |
? | 0 或 1 次 |
{n} | 重複 n 次 |
{n,m} | 重複 n 到 m 次 |
(...) | 群組 |
[...] | 字元集合 |
了解 JavaScript RegExp 的基本語法與常用方法,可以提升處理字串的效率。不論是表單驗證或邏輯判定,都能靠正規表達式達成更簡潔、維護性更高的程式!