JavaScript 正則表達式完整指南:RegExp 物件深入解析
JavaScript 內建了強大的正則表達式支援。本文將深入解析 JavaScript 的 RegExp 物件,從基礎語法到 ES2024 的最新功能,提供一份完整的參考指南。
建立正則表達式
JavaScript 中有兩種建立正則表達式的方式:
- 字面量語法:
/pattern/flags - 建構函式:
new RegExp("pattern", "flags")
字面量語法在程式碼載入時編譯,適合固定的 Pattern。建構函式在執行時編譯,適合動態生成的 Pattern。
旗標(Flags)
| 旗標 | 名稱 | 說明 |
|---|---|---|
g | global | 全域搜尋,比對所有結果 |
i | ignoreCase | 忽略大小寫 |
m | multiline | 多行模式,^ 和 $ 比對每行 |
s | dotAll | 讓 . 也比對換行字元 |
u | unicode | 啟用 Unicode 模式 |
v | unicodeSets | ES2024 Unicode 集合 |
d | hasIndices | 提供比對位置索引 |
y | sticky | 粘性搜尋,從 lastIndex 開始 |
常用方法
RegExp 方法
- test() — 測試是否比對,回傳布林值
- exec() — 執行比對,回傳比對陣列或 null
String 方法
- match() — 回傳比對結果陣列
- matchAll() — 回傳所有比對的迭代器(ES2020)
- replace() — 替換比對的文字
- replaceAll() — 替換所有比對(ES2021)
- search() — 回傳第一個比對的索引
- split() — 根據正則分割字串
具名捕獲群組
ES2018 引入了具名捕獲群組 (?<name>...),讓捕獲的內容可以透過名稱而非索引來存取,大幅提升程式碼的可讀性。
前瞻與後顧
| 類型 | 語法 | 說明 |
|---|---|---|
| 正向前瞻 | (?=...) | 後面必須是指定的模式 |
| 負向前瞻 | (?!...) | 後面不能是指定的模式 |
| 正向後顧 | (?<=...) | 前面必須是指定的模式 |
| 負向後顧 | (?<!...) | 前面不能是指定的模式 |
ES2024 新功能:v 旗標(unicodeSets)帶來了集合運算功能,允許在字元類別中使用交集(&&)和差集(--)運算,讓 Unicode 字元的處理更加靈活。
測試你的正則表達式
使用我們的工具即時測試 JavaScript 正則表達式:
立即使用正則表達式測試工具 →結語
JavaScript 的正則表達式功能隨著 ECMAScript 標準的演進越來越強大。掌握這些功能,能幫助你更有效率地處理各種文字處理需求。
參考文獻
- ECMA International. "ECMAScript Language Specification — RegExp." ECMA-262. https://tc39.es/ecma262/#sec-regexp-regular-expression-objects
- Mozilla Developer Network. "RegExp." MDN Web Docs. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
- TC39. "TC39 Proposals." GitHub. https://github.com/tc39/proposals