BrowserDevTools

從範例產生正規表達式

先貼上文字,再貼上你想命中的部分(一行一筆)。你會取得排序過的候選、每一段的說明、用你自己的文字做的即時標亮測試,以及可直接貼進 JavaScript、Python、PCRE 或 RE2 的程式碼。

旗標

文字與期望都在這個分頁內處理。不上傳、也不產生分享連結。

候選

這個樣式是怎麼組出來的

  • ID字面值「ID」
  • -字面值「-」
  • \d+數字串「4821」→ \d+

貼到

g
/ID-\d+/g

在你的文字上測試

2 個命中 · 期望 2
# Deploy log
[12:04:11] build ID-4821 started
[12:04:18] artifact app.tar.gz ready
[12:04:23] report mailed to ops@example.com
[12:05:02] build ID-4824 started
[12:05:19] smoke tests passed

這個候選未命中的部分

  • # Deploy log [12:04:11] build
  • started [12:04:18] artifact app.tar.gz ready [12:04:23] repo
  • started [12:05:19] smoke tests passed

候選描述的是你範例的形狀,不是它們的意義——請先看命中數,並再試一筆範例,再決定要不要相信它。

為什麼「從範例出發」是另一種工具

搜尋 regex generator,第一頁是解說文章、速查表與「人看得懂」的轉譯器。它們都假設你已經知道自己要什麼樣式,只是需要有人幫你寫出來。真正難的時刻更早:你手上有一堆應該命中的字串——日誌 ID、工單編號、試算表裡的某一欄——你要的是樣式,不是一堂課。

那個時刻有個陷阱,而這個工具就是為了避開它而設計:看起來合理的樣式,往往會命中你根本沒打算命中的東西。因此這裡的每個候選在提出之前,都會先回頭跑過你自己的文字,而排序會說明哪些精確重現了你的範例、哪些又衝過了頭:

全部都在你的瀏覽器裡計算:不上傳、也沒有分享連結。候選只使用 JavaScript、Python、PCRE 與 RE2 共通的語法——沒有反向參照,也沒有環視——因此同一個樣式貼到哪裡,行為都一樣;如果你自己改出災難性回溯的風險,工具也不會替你藏起來。請把產出當成審閱的起點,而不是規格:它歸納的是你範例的形狀,從來不是它們的意義。

常見問題

我的文字會被上傳嗎?
不會。尋找出現位置、一般化與驗證全都在你的瀏覽器分頁內完成。沒有接收文字的後端端點、不會留下記錄、也不產生分享連結——你可以在 Network 面板自行確認。
它到底推論出什麼?
形狀,不是意義。給它 john@example.com,它可以提出電子郵件這個形狀,因為形狀庫裡有;給它 SKU-99123,誠實的答案是「字母、一個連字號、然後數字」——這比手寫 \w+-\d+ 確實好得多,但它並沒有宣稱 SKU 是什麼。測試面板存在的目的,就是讓你自己判斷結果,而不是相信它。
如果某個候選命中的比我的範例多呢?
它會如實說出來。標籤會顯示多出的命中數,該候選的排序會低於精確重現你範例的那些,未命中片段清單也會顯示樣式跳過了什麼。如果沒有任何候選能精確重現你的範例——例如兩筆範例彼此重疊——工具會直接告訴你,而不是把錯誤的樣式當成成功呈現。
產生的樣式執行起來安全嗎?
候選裡沒有反向參照、沒有環視,也沒有巢狀量詞,這讓它們與 RE2 相容,也避開了災難性回溯。如果你手動改動,把量詞嵌進已量化的群組裡,工具會標出這個風險。話說回來,樣式的好壞取決於驗證:在它守護任何東西之前,先用真實資料測過。
支援哪些方言?
JavaScript、Python、PCRE/PHP 與 RE2。只會輸出四者共通的語法,因此同一個樣式在四者裡意義相同;匯出區塊會依你選的方言改寫成慣用寫法(regex 字面值、re.compile,或 RE2::PartialMatch 呼叫)。