正則運算式
/
/
點開可複製為 JavaScript(字面量 / 建構函式)、Python、Java 的寫法。
測試字符串
文字取代
在取代內容裡可用 $1、$2 參照擷取分組,$& 參照整段比對,$<name> 參照具名分組。
比對詳情
懸停或點擊條目可在上方文字中定位該比對
運算式解說
依語法片段逐段解說目前運算式
正則語法速查
點擊條目插入到運算式游標處
常用正則示例
點一下即可載入表達式、標誌與配套測試文本。
功能特性
- 邊輸入邊匹配:測試文本里所有命中位置實時高亮,多段匹配交替配色,一眼看清覆蓋範圍。
- 支持 g / i / m / s / u / y 六個標誌,點一下即切換,非法表達式給出原生引擎的錯誤原因。
- 比對詳情逐條列出:整體命中的內容與位置、長度,以及每個編號分組和具名分組的取值與區間。
- 取代檢視支援 $1、$&、$<name> 等參照,即時預覽取代結果,可一鍵複製。
- 運算式逐段解說與語法速查表:把正則拆開講清每一片段的作用,常用寫法隨點隨插。
- 純前端計算:文本只在你的瀏覽器里被 JavaScript 引擎匹配,不上傳伺服器,界面支持中/繁/英。
使用方法
- 在頂部輸入框寫正則(不用帶斜槓),點 g/i/m/s/u/y 按鈕切換標誌。
- 在「測試字符串」里粘貼文本,命中處立即高亮;表達式寫錯時輸入框下方會給出原因。
- 「比對詳情」列出每處比對與分組,懸停條目可在文字中定位對應突顯;「文字取代」填取代內容即可即時預覽。
- 不熟悉的語法可在「語法速查」點擊查看說明並插入,或用「常用正則示例」一鍵載入 email、URL、IPv4 等現成寫法。
常見問題
- 這裏的正則引擎和別的網站一樣嗎?
- 本頁直接用你當前瀏覽器內置的 JavaScript 正則引擎(ECMAScript 規範)執行匹配,沒有經過服務端。同一份表達式在 Chrome / Firefox / Safari 之間偶爾會有行為差異(尤其新語法支持進度不同),跨瀏覽器使用時以目標瀏覽器為準;伺服器端語言(Python / Java / PCRE)語法相近但不完全相同。
- 為什麼我的表達式一直「無匹配」?
- 常見原因:忘了開 g 標誌導致只匹配第一處(本頁高亮按標誌實時計算);^ 和 $ 在多行文本里需要開 m 標誌才按行生效;點號 . 默認不匹配換行,需要 s 標誌;還有反斜槓在部分輸入場景被吞掉,可對照「表達式解釋」檢查逐段拆解的結果。
- 取代裡的 $1、$<name> 是怎麼工作的?
- 取代字串遵循 JavaScript String.replace 的規則:$& 代表整段比對,$1、$2 代表第 1、2 個擷取分組,$<name> 代表名為 name 的擷取分組,$$ 代表字面 $。要插入字面的 $ 符號後面不接參照時,寫成 $$。
- 貪婪與非貪婪匹配有什麼區別?
- 默認量詞是貪婪的:.* 會儘可能多地吃掉字符再找後續內容;在量詞後加 ? 變成惰性(.*?),會儘可能少地匹配。例如從 "<a> <b>" 中取標籤內容,<.*> 匹配整串,<.*?> 只匹配 <a>。用本頁分別試一次,高亮範圍一目了然。
- 我粘貼的敏感文本會被上傳嗎?
- 不會。匹配、高亮、替換全部在你的瀏覽器內存里由本地 JavaScript 完成,本頁是純靜態頁面,沒有後端接口,文本與表達式只會保存在你自己設備的 localStorage 里以便下次打開恢復,除非你主動複製,本站伺服器上看不到任何內容。
- 為什麼我的運算式會讓頁面卡住?
- 這是「災難性回溯」:像 (a+)+ 或 ^(\w+\s?)*$ 這類「量詞套在本身含量詞的分組上」的寫法,一旦遇到不比對的字元,引擎要嘗試的分支數會指數級膨脹——55 個字元就可能算上一分半。本頁把比對放到獨立執行緒裏執行並設了 1 秒硬逾時,逾時會中止這次比對並給出提示,頁面不會再被凍死。等價但不含嵌套量詞的寫法通常存在,例如用 ^\w+(?:\s\w+)*$ 代替 ^(\w+\s?)*$。
- 怎麼比對換行?點號為什麼吃不到換行符?
- 點號 . 默認不比對換行,兩種做法:①在修飾符裏開 s(dotAll),讓 . 也比對換行;②不開 s 時寫 [\s\S](或等價的 [^]),它明確表示「任意字元、含換行」。反過來,如果只想讓 ^ 與 $ 按行生效,開 m 修飾符。
- 為什麼 \d 比對不到全形數字「123」?中文怎麼比對?
- \d 等價於 [0-9],只認半角 ASCII 數字;全形數字屬於 Unicode 的 Nd 類。比對任意語言的數字可以開 u 修飾符後寫 \p{Nd};比對漢字用 [\u4e00-\u9fa5],或開 u 後寫 \p{Script=Han}。本頁「語法速查 → Unicode 與高級」裏有現成條目可點。
- 取代字串裏引用了不存在的分組會怎樣?
- 這裏有個容易誤判的地方:$<name> 在「運算式裏有具名分組、但沒有這個 name」時會取代成空字串,而在「運算式裏一個具名分組都沒有」時會原樣保留這幾個字元;$99 這類越界組號也原樣保留。同一串在兩種運算式下結果完全不同,所以本頁會在取代框下方直接給出內聯提示。
- 為什麼 (?i)、(?>a+) 這類寫法會報錯?
- JavaScript 不支援內聯修飾符 (?i),也不支援原子分組 (?>…)、\A、\Z、[[:alpha:]]、\R 這些 Python / PCRE 口味的語法,遇到會直接報語法錯。本頁檢測到這類寫法時會額外提示「這是後端正則語法」,請把這類運算式放到目標語言的引擎裏測試——本頁只切換介面上那 6 個修飾符按鈕。
關於本工具
正則實驗室是一個線上正則運算式測試器:運算式 + 測試文字 + 即時突顯 + 分組詳情 + 取代預覽 + 語法速查放在同一頁,功能對標 RegExr / regex101 的核心用法。
匹配由瀏覽器原生 RegExp 引擎執行,解釋器與速查表是頁面內置的靜態數據;沒有任何後端或第三方 API,輸入內容不出瀏覽器,界面支持簡體 / 繁體 / English。
站內其他工具
- MassCalc 分子量與質譜計算
- GlycoCalc 糖質量計算
- PrimerCalc 引物 Tm 計算
- SolutionCalc 溶液配製計算
- ProteinCut 蛋白酶切肽段質量計算
- PepFragCalc 多肽碎片計算
- GRAVYCalc 蛋白疏水性計算
- SDS-PAGE-Calc 聚丙烯酰胺凝膠配方計算
- 引用格式生成器
- 函數繪圖器
- 色盲模擬與配色檢查器
- 文本比對
- VennSVG 韋恩圖繪製
- 全部在線工具
純前端計算 · 瀏覽器原生 RegExp 引擎 · 免費 · 支持中/繁/英