§

樣式

旗標
§

測試字串

§

比對

0 個比對

    尚未有比對 — 請在上方輸入樣式與測試字串。

    §

    取代模式

    快速參考

    字元類別

    \d
    任意數字,等同 [0-9]。
    \w
    任意單字字元 — 字母、數字或底線。
    \s
    任意空白 — 空格、Tab、換行等。

    錨點

    \b
    單字邊界處的零寬度斷言。
    ^
    輸入的開頭(設定 m 旗標時為每行開頭)。
    $
    輸入的結尾(設定 m 旗標時為每行結尾)。

    量詞

    *
    前一個 token 零次或多次,貪婪。
    +
    前一個 token 一次或多次,貪婪。
    ?
    前一個 token 零次或一次 — 也會讓其前的量詞變為惰性。
    {n,m}
    前一個 token 重複 n 到 m 次。

    群組

    (...)
    擷取群組 — 在取代中以 $1, $2, … 公開。
    (?:...)
    非擷取群組 — 分組但不佔用槽位。
    (?...)
    命名擷取群組 — 在取代中以 $ 公開。

    Lookaround

    (?=...)
    正向 lookahead — 僅當後接 … 時才比對
    (?!...)
    負向 lookahead — 僅當不後接 … 時才比對
    (?<=...)
    正向 lookbehind — 僅當前面是 … 時才比對
    (?
    負向 lookbehind — 僅當前面不是 … 時才比對

    跳脫

    \\
    字面的反斜線字元。
    \.
    字面的點 — 對任何中介字元進行跳脫以按字面比對。

    對台灣工程師而言,regex 是處理台灣特有資料格式不可或缺的工具:身分證字號(/^[A-Z][12]\d{8}$/)、統一編號八碼(含查核碼)、手機號碼(09 開頭十碼)、電子發票字軌與隨機碼、車牌新舊格式皆需精準比對。蝦皮 SKU、PChome 商品 SPU、momo訂單編號各有自家樣式;React Hook Form 與 Vue 表單驗證大量使用 regex。Apache 與 nginx 日誌分析(常見於中華電信 HiNet 機房)、Husky pre-commit 鉤子過濾、以及 iThome 鐵人賽爬蟲解析文章標題,皆是日常 regex 應用情境。

    regex 在你的瀏覽器中如何運作?

    每個 JavaScript 執行環境都內建正規表達式引擎 — new RegExp(pattern, flags) 會編譯你的樣式,然後 String.prototype.matchString.prototype.replaceRegExp.prototype.exec 等方法會在任何輸入字串上運行它。此測試器把該引擎包裝在 UI 中,讓你不用離開瀏覽器就能編輯、執行與檢視樣式。你輸入的任何內容 — 樣式、旗標、測試字串或取代 — 都不會經過網路傳送。

    regex 測試器如何運作?

    管線由幾個簡短步驟組成,全部都在用戶端於每次按鍵時執行(以 150 毫秒去抖動,讓打字保持流暢):

    1. 你的樣式主體由上方欄位讀取(沒有前導或結尾的 / 分隔符 — 它們只是裝飾)。選取的旗標小膠囊會被串接成旗標字串,例如 gigimsuy
    2. new RegExp(patternBody, flags) 會編譯樣式。若引擎拋出 SyntaxError(例如不成對括號或無效跳脫),訊息會顯示在測試字串上方,且比對清單被清空。編譯錯誤是 V8 / SpiderMonkey / JavaScriptCore 真實的 err.message,因此與 DevTools 中所見一致。
    3. 對於比對清單,測試器一律以合成的 global 旗標枚舉 — 因此即便你關閉 g,清單仍會顯示每個比對。標準的零寬度比對防護 (if (m.index === rx.lastIndex) rx.lastIndex++) 可避免在會比對空字串的樣式上空轉。取代模式會尊重你真正的旗標集合,因此 $& 行為與 String.prototype.replace 相同。
    4. 每次迭代之間,測試器會檢查 performance.now() - start,一旦過了 50 毫秒就中止。這可防止像 (a+)+$ 這類輸入在長串 a 上的災難性回溯 — 否則分頁會凍結。防護屬於盡力而為:單一比對的病態樣式仍可能在一次 exec 呼叫中消耗時間。若發生這種情況,請重新整理分頁,並以非貪婪量詞或原子佔有式風格(例如 [^x]*x)改寫樣式。
    5. 測試字串會在每個比對的範圍處切成片段,比對到的片段被包在 <mark class="rx-match rx-cap-N"> 元素中,其中 N 在六種調色盤顏色之間循環,讓相鄰的比對一眼就可區分。每個比對的編號群組 (m[1], m[2], …) 與命名群組 (m.groups) 會以帶標籤的列呈現於其下;若設定了 d 旗標,也會顯示各群組的 [start, end] 索引。

    為什麼使用這個 regex 測試器?

    • 隱私:每個樣式、測試字串與取代都在你的瀏覽器中,透過內建的 JavaScript RegExp 引擎執行。沒有任何內容會離開分頁 — 當輸入是客戶日誌、外洩憑證樣式或任何你不會貼到託管 SaaS regex 遊樂場的內容時,這點尤其重要。
    • 誠實風味:測試器精準呈現 Node.js、Chrome、Safari、Firefox 以及所有基於瀏覽器的表單驗證器所執行的 regex 引擎。沒有 Perl 風味的轉譯層在隱藏細微差異 — 在這裡能用的,在你的程式碼中也能用。
    • 擷取與命名群組除錯:每個編號群組 ($1, $2, …) 與命名群組 ($<year>) 都會顯示於每個比對,讓你能建立剖析器並準確讀取槽位。取代模式讓你能自由地混用群組 — $2-$1 交換前兩個槽位,$<name> 插入命名槽位,$& 回顯整個比對。
    • 災難性回溯防護:枚舉的 50 毫秒上限,在像 (a+)+$ 這類病態樣式凍結分頁之前就將其中止。你看到的是說明性的錯誤訊息,而不是當掉的瀏覽器,頁面也會立即恢復。

    regex 測試器有哪些常見應用?

    正規表達式出現在網頁開發、資安與資料工作中 — 此測試器針對最常見的使用案例:

    • 表單驗證:原型化電子郵件、電話或郵遞區號樣式,將樣本輸入貼到測試字串中,並在把樣式送進生產程式碼前確認每個正例都比對到、每個反例都不比對。
    • 日誌解析:貼上一段 NGINX、應用程式或稽核日誌輸出,針對你關心的部分寫出帶命名群組的樣式 ((?<ip>…) (?<path>…)),並逐個比對讀取已擷取的槽位,以確認你的剖析器正確。
    • 重構式搜尋與取代:使用取代模式重寫程式片段中的識別字 — (\w+)\.set(\w+)\($1.$2 = 把 setter 呼叫轉成屬性指派,即時預覽會在你把它提交到 codemod 前顯示結果。

    regex 範例長什麼樣子?

    以樣式 (\d{4})-(\d{2})-(\d{2}) 搭配 g 旗標,對測試字串 release 2025-11-15, prerelease 2026-05-25 執行。引擎找到兩個比對。第一個是 2025-11-15,群組 1 = 2025、群組 2 = 11、群組 3 = 15。第二個是 2026-05-25,群組結構相同。在取代模式中,取代範本 $3/$2/$1 會把兩個日期分別重寫為 15/11/202525/05/2026 — 單一樣式即可完成 ISO 到 DMY 的轉換,你可以在把樣式接入腳本之前以視覺方式驗證。

    把這個測試器當作所有 regex 工作的快車道 — 建構、除錯或改寫樣式。一切都在本機執行;什麼也不會被記錄;regex 引擎就是你瀏覽器內建的引擎,因此行為與生產程式碼在執行時所見一致。