正則表達式測試
測試正則表達式並即時查看匹配結果
關於 正則表達式測試
這個工具讓你直接在瀏覽器裡寫 JavaScript 正則表達式,貼上測試文字後即時看到所有匹配位置和捕獲群組的高亮結果。它使用的是 V8 引擎的正則實作,結果和你在 Chrome、Node.js 裡跑完全一致——不用擔心把 pattern 貼回程式碼後才踩到坑。不管是建立資料驗證規則、從 log 裡萃取欄位,還是讀懂別人留下來的那段神秘 regex,都能快速在這裡驗證。
常見使用情境
常見問題
JavaScript regex 和 PCRE 有什麼差別?
最常踩到的差異:JS 用 (?<name>...) 做具名捕獲群組(PCRE 是 (?P<name>...));JS 沒有遞迴或條件 pattern;lookbehind((?<=...))要 ES2018 以上才支援。如果你要把 Python 或 PHP 的 regex 移植過來,這幾點要優先確認。
各個 flag 分別做什麼事?
g(global)找出所有匹配而不是只回傳第一個。i 讓匹配不區分大小寫。m 讓 ^ 和 $ 在每一行的開頭結尾都生效,而不是整個字串的頭尾。s(dotall)讓 . 也能匹配換行字元。u 啟用完整的 Unicode 模式,可以使用 \p{} 屬性 escape。d(ES2022)在每個捕獲群組上加上 start/end 位移值。
貪婪(greedy)和非貪婪(non-greedy)有什麼差別?
貪婪量詞(*、+、?)盡可能多匹配再回溯。非貪婪(*?、+?、??)盡可能少匹配。例如 <.+> 對 <a><b> 會回傳一個匹配(整個 <a><b>);<.+?> 會回傳兩個(<a> 和 <b>)。當你要匹配兩個邊界之間最短的內容時,記得用非貪婪。
lookahead 和 lookbehind 是什麼?
零寬度斷言——用來確認某個位置的上下文,但不把上下文本身納入匹配結果。(?=...) 是正向 lookahead(後面必須符合),(?!...) 是負向。(?<=...) 是正向 lookbehind(ES2018+)。當你要匹配的內容取決於前後文,但不想把前後文包進去時就用它。
什麼時候應該用具名捕獲群組?
只要 pattern 裡超過一兩個群組,就值得用具名群組。(?<year>\d{4})-(?<month>\d{2}) 這樣寫,程式碼讀起來自帶說明,取值也用 match.groups.year 而不是容易出錯的索引。日後 pattern 調整、群組順序變了,也不用全部找出來改索引。