RegexSmith
在撰寫規則運算式的地方直接說明和測試它。將滑鼠暫留在 C# 中的模式上:每一部分以一行淺顯文字說明,群組以色彩標示,並列出可相符的字串;可能卡死的模式會加上底線;在 RegexSmith 測試器中用自己的範例試驗,按一下即可將模式寫回程式碼。
免費 · Visual Studio 2022 和 2026 · 14 種介面語言 · 無遙測
為什麼選擇 RegexSmith
![[GeneratedRegex] 模式上方的暫留卡片:群組以色彩標示的模式、每一部分一行的淺顯說明、可相符的範例和一個不相符的範例,以及狀態「✓ 安全」](../../regexsmith/marketplace/hero.png)
淺顯文字,而不是語法課
^(?<year>\d{4})-(?<id>\d{1,5})$ 會變成「文字開頭」、「剛好 4 個數字」、「1 到 5 個數字」——每一部分一行,巢狀於所屬群組下,每個群組都有自己的色彩。
由真正的引擎檢查
卡片中的範例和測試器中的每個結果都直接來自 .NET 規則運算式引擎,並使用呼叫中的選項。您看到的就是您的應用程式會做的。
可能卡死的模式
([a-z0-9]+\.?)+ 看似無害,卻可能在一個幾乎相符的長字串上讓要求停住。RegexSmith 會為這類重複加上底線,並透過 Ctrl+. 修正它們。
免費,沒有附加條件
沒有訂閱、沒有「Pro」版、不收集資料,也不會在「輸出」視窗或啟動時顯示訊息。模式和範例只保存在您的電腦上。我們唯一的請求是:在您用過一段時間之後,到 Marketplace 給個評分。支援 Visual Studio 2022 和 2026,x64 和 ARM64。
功能
- C# 中模式上方的暫留卡片:群組以色彩標示的模式、每一部分一行的淺顯說明、彩色的群組標籤和狀態——✓ 安全、⚠ 可能停止回應或✕ 無效。
- 群組底線:直接在程式碼中每個擷取群組下方畫一條該群組色彩的細線;巢狀群組的位置較低。
- 由模式產生的範例——兩個可相符的字串和一個不相符的字串——由真正的 .NET 引擎檢查。
- RX001:在可能耗費指數級時間的重複下方顯示波浪線,Ctrl+. 中提供修正及修改前後的預覽。
- 停駐在「尋找結果」旁邊的 RegexSmith 測試器:帶有 ✓/✗ 預期的範例、醒目提示的相符項目和群組、群組表格以及取代索引標籤。
- 套用至程式碼:編輯後的模式連同選項寫回同類字串常值,可一次復原。
- 複製為單元測試,支援 xUnit、NUnit 或 MSTest——您的範例會變成測試案例。
暫留卡片
將滑鼠暫留在模式字串上,Visual Studio 的一般工具提示中會多出一張 RegexSmith 卡片:模式的意義、它相符的內容,以及它是否安全。

適用範圍
在 C# 檔案中,下列各項的模式上:
new Regex("…"),帶或不帶RegexOptions;- 靜態方法
Regex.IsMatch、Match、Matches、Replace、Split和Count; [GeneratedRegex("…")];[RegularExpression("…")]——此時卡片會顯示驗證:整個值必須相符;- 同一檔案中被上述某一項使用的
const string。
一般字串、逐字字串(@"…")和原始字串("""…""")都依編譯器的方式讀取,因此 "\\d" 和 @"\d" 是同一個模式。
卡片顯示的內容
| 畫面上 | 意義 |
|---|---|
| RegexSmith · .NET 規則運算式 · IgnoreCase | 模式的類型和從呼叫中讀取的選項,右側是狀態。 |
| 模式 | 每個擷取群組的括號使用其色彩,內部以該色彩加上底線;文字保持佈景主題色彩,因此依然易讀。 |
| 剛好 4 個數字 | 每一部分一行淺顯說明——「文字開頭」、「以下文字其中之一:『jpg』、『png』」、「1 到 5 個數字」——巢狀於所屬群組下。很長的模式以 … 還有 N 行結尾。 |
| 群組標籤 | 每個群組的名稱或編號顯示在其色彩的標籤上——與模式中和程式碼下方的色彩相同。 |
| ✓ 相符:… ✗ 不相符:… | 兩個可相符的字串和一個不相符的字串,由模式產生並經真正的 .NET 引擎檢查。空格顯示為淺色圓點。 |
| ▶ 測試模式… | 在 RegexSmith 測試器中開啟該模式。 |
狀態
| 畫面上 | 意義 |
|---|---|
| ✓ 安全 | .NET 接受該模式,且其中沒有任何部分會發生災難性回溯。 |
| ⚠ 可能停止回應 | 某個重複在幾乎相符的長輸入上可能耗費指數級時間;卡片會說明屬於哪一類(RX001),並提示 Ctrl+. 提供修正。 |
| ✕ 無效 | 引擎拒絕了該模式;卡片會顯示其訊息:.NET 不接受此模式:… |
「安全」僅表示:.NET 接受該模式,且它不會卡死。並不表示它相符您想要的內容——這正是範例和測試器的用途。
群組底線
模式中的每個擷取群組都會直接在程式碼中獲得一條其色彩的細線——與卡片中的色彩相同。一個有五個群組的長模式一眼就能看懂:哪部分是年份,哪部分是編號。
位於另一個群組內部的群組會稍低一些,這樣兩條線都看得見。色彩依序為:鮭紅、綠、藍、紫、琥珀、青——然後循環。
可以在設定中關閉底線:為擷取群組加上底線。
可能卡死的模式
有些模式在幾乎相符的長字串上會耗費指數級時間——這正是規則運算式讓 Web 要求停住的典型方式。RegexSmith 依據形態辨識它們,並在重複下方加上警告波浪線;暫留即可查看原因。
![([a-z0-9]+\.?)+ 下方的 RX001 波浪線,Ctrl+. 功能表已開啟,並顯示修正預覽:舊模式被劃掉,新模式使用原子群組](../../regexsmith/marketplace/backtracking.png)
哪些會加上底線(RX001)
- 巢狀重複:
(a+)+、([a-z0-9]+\.?)+——同一串字元可以用非常多種方式在內層和外層重複之間拆分。 - 重複的替代項目比對相同字元:
(\w|\d)+——一個數字可以被任一分支相符,因此每多一個數字,工作量就加倍。
原子群組或環顧內部不會標示,使用 RegexOptions.NonBacktracking 時也從不標示——那裡不會發生這種情況。
Ctrl+. 中的修正
將游標放在波浪線上並按 Ctrl+.——每個修正都會顯示預覽:修改前(劃掉)和修改後的模式。
| 修正 | 作用 |
|---|---|
| 將內部重複設為不可部分完成:(?>…) | 用 (?>…) 包住內部重複。相符的字串相同;重複不再能以多種方式拆分。 |
| 使用 RegexOptions.NonBacktracking (.NET 7+) | 將該選項加入呼叫中。任何輸入皆為線性時間;需要 .NET 7 或更新版本。僅在模式允許時提供——不能有反向參考、環顧、原子群組或平衡群組、條件。 |
| 在 RegexSmith 中測試此模式 | 在測試器中開啟該模式——任何模式上都會提供,而不僅限於有風險的模式。 |
可在設定(編輯器中的提示)中或透過工具提示中的不再顯示此類提示關閉 RX001;Ctrl+. 中的修正仍可使用。
測試器
RegexSmith 測試器開啟時停駐在「尋找結果」旁邊。模式來自程式碼並與之保持連結:用您自己的範例試驗、修改,然後寫回。

開啟方式
- 暫留卡片中的 ▶ 測試模式…;
- 在模式上按 Ctrl+. › 在 RegexSmith 中測試此模式;
- 在 C# 檔案中按一下滑鼠右鍵 › 測試規則運算式模式;
- 檢視 › 其他視窗 › RegexSmith 測試器——不與程式碼連結:一個試驗模式的地方。
模式及其選項
頂端顯示模式所在的檔案和行——按一下即可前往。下方是模式方塊、狀態列(✓ 安全、⚠ 可能停止回應或引擎的錯誤,然後是 N/M 符合預期 · ms)以及選項標籤:IgnoreCase、Multiline、Singleline、IgnorePatternWhitespace、ExplicitCapture、RightToLeft、CultureInvariant。每次變更都會立即重新執行。
範例和預期
第一次開啟時,卡片中的範例已經在那裡:兩個應該相符,一個不應該相符。在新增範例並按 Enter…中輸入新的範例;按一下範例可編輯,✕ 可移除。每個範例前的標記表示它應有的結果——按一下可變更:
| 畫面上 | 意義 |
|---|---|
| ✓ | 應相符 |
| ✗ | 不應相符 |
| – | 無預期,僅顯示 |
結果與預期相反的範例會變紅——✗ 相符或✗ 不相符——如此範例就成了模式的一份小規格。相符部分會著色,群組以各自色彩加上底線,空格顯示為圓點。執行超過 1 秒會停止並顯示 ⏱ 太慢。
所選範例的群組列出所選範例的每個相符項目:先是整個相符項目,然後是每個群組及其值和位置(未參與相符時顯示未擷取)。
取代
取代索引標籤會加入一個取代方塊——$1、${name},$$ 代表 $——並依 Regex.Replace 的方式顯示每個範例的結果。
複製、還原、套用
複製為單元測試會將包含您範例的測試放到剪貼簿上,支援 xUnit、NUnit 或 MSTest——規格就此移入測試專案。
還原會回到程式碼中的模式和選項;範例會保留。
套用至程式碼會將模式連同選項依原本的常值類型(一般、逐字或原始)寫回——一次復原即可還原。如果測試器開啟後那段程式碼有所變更,則不會寫入任何內容:請從模式重新開啟測試器。
範例依模式和方案記錄在 %LocalAppData%\RegexSmith\samples 中,下次開啟時它們已經在那裡。不會在存放庫中寫入任何內容。
設定
工具 › 選項 › SmithWorks › RegexSmith。每個選項都有簡短說明,介紹它的作用。
| 選項 | 預設值 |
|---|---|
| 暫留時說明模式 | 開啟 |
| 為擷取群組加上底線 | 開啟 |
| RX001 災難性回溯 | 開啟 |
| 請求在 Marketplace 上評分 | 開啟 |
底部有重設為預設值、文件、在 Marketplace 上評價和傳送意見反應。
設定保存在 %LocalAppData%\RegexSmith 中。

常見問題
RegexSmith 會傳送任何資料嗎?
不會。模式從開啟的文件中讀取並在您的電腦上執行;範例保存在 %LocalAppData%\RegexSmith 中。沒有網路要求,也沒有遙測。
卡片顯示「✓ 安全」。這個模式正確嗎?
不一定。「安全」表示 .NET 接受該模式,且其中沒有任何重複會發生災難性回溯。它是否相符您想要的內容要靠範例來呈現:在測試器中將它們標示為 ✓ 或 ✗。
為什麼我的模式上沒有卡片?
卡片會出現在 RegexSmith 能辨識為模式的字串常值上:new Regex、靜態 Regex 方法、[GeneratedRegex] 或 [RegularExpression] 的引數,或在這些位置使用的同一檔案中的常數。執行階段建立的模式(串接而成、從設定讀取)無法讀取。另外,請檢查設定中的暫留時說明模式。
使用的是哪個規則運算式引擎?
Visual Studio 本身所執行的 .NET 規則運算式引擎,並使用呼叫中的選項。RegexOptions.NonBacktracking(.NET 7+)也會從呼叫中讀取;此時範例在一般引擎上執行,兩種方式相符的字串相同。
「套用至程式碼」沒有任何作用。
測試器開啟後,模式所在的程式碼有所變更,因此 RegexSmith 不會寫入一個可能已不再包含該模式的位置——測試器會在按鈕下方說明這一點。請從模式重新開啟測試器。如果程式碼中沒有放置選項的位置([RegularExpression] 不接受選項),則只寫入模式,不寫入選項。
它支援 VB.NET、JavaScript 或 TypeScript 嗎?
1.0 不支援:僅支援 C#。其他語言使用其他引擎;如有需要,請在 Feedback 存放庫中提出。
要在哪裡回報問題或提出功能建議?
請在 GitHub 上的 Feedback 存放庫中建立 issue——那裡有用於回報錯誤和提出建議的表單(如有私密名稱,請先替換)。也可以使用 Marketplace 上的 Q&A 索引標籤。
變更記錄
1.0.1
- 編輯器中的提示在選項頁面上有了自己的清單,工具提示中的連結可就地關閉某類提示。
1.0.0
- 首個版本:帶有淺顯說明、彩色群組、經 .NET 引擎檢查的範例和狀態的暫留卡片;程式碼中的群組底線;針對可能卡死之模式的 RX001,並在 Ctrl+. 中提供原子群組和 NonBacktracking 修正;帶有預期、群組、取代、複製為單元測試和套用至程式碼的 RegexSmith 測試器;一次性的評分請求。