regex 在你的瀏覽器中如何運作?
每個 JavaScript 執行環境都內建正規表達式引擎 — new RegExp(pattern, flags) 會編譯你的樣式,然後 String.prototype.match、String.prototype.replace、RegExp.prototype.exec 等方法會在任何輸入字串上運行它。此測試器把該引擎包裝在 UI 中,讓你不用離開瀏覽器就能編輯、執行與檢視樣式。你輸入的任何內容 — 樣式、旗標、測試字串或取代 — 都不會經過網路傳送。
regex 測試器如何運作?
管線由幾個簡短步驟組成,全部都在用戶端於每次按鍵時執行(以 150 毫秒去抖動,讓打字保持流暢):
- 你的樣式主體由上方欄位讀取(沒有前導或結尾的
/分隔符 — 它們只是裝飾)。選取的旗標小膠囊會被串接成旗標字串,例如gi或gimsuy。 new RegExp(patternBody, flags)會編譯樣式。若引擎拋出SyntaxError(例如不成對括號或無效跳脫),訊息會顯示在測試字串上方,且比對清單被清空。編譯錯誤是 V8 / SpiderMonkey / JavaScriptCore 真實的err.message,因此與 DevTools 中所見一致。- 對於比對清單,測試器一律以合成的 global 旗標枚舉 — 因此即便你關閉
g,清單仍會顯示每個比對。標準的零寬度比對防護 (if (m.index === rx.lastIndex) rx.lastIndex++) 可避免在會比對空字串的樣式上空轉。取代模式會尊重你真正的旗標集合,因此$&行為與String.prototype.replace相同。 - 每次迭代之間,測試器會檢查
performance.now() - start,一旦過了 50 毫秒就中止。這可防止像(a+)+$這類輸入在長串a上的災難性回溯 — 否則分頁會凍結。防護屬於盡力而為:單一比對的病態樣式仍可能在一次exec呼叫中消耗時間。若發生這種情況,請重新整理分頁,並以非貪婪量詞或原子佔有式風格(例如[^x]*x)改寫樣式。 - 測試字串會在每個比對的範圍處切成片段,比對到的片段被包在
<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/2025 與 25/05/2026 — 單一樣式即可完成 ISO 到 DMY 的轉換,你可以在把樣式接入腳本之前以視覺方式驗證。
把這個測試器當作所有 regex 工作的快車道 — 建構、除錯或改寫樣式。一切都在本機執行;什麼也不會被記錄;regex 引擎就是你瀏覽器內建的引擎,因此行為與生產程式碼在執行時所見一致。