正規表示式測試

即時測試 JavaScript 正規表示式:標示每個符合的位置,列出擷取群組與具名群組,可切換旗標並預覽取代結果,全部在瀏覽器執行。

/ /g
旗標

符合結果

沒有符合的結果

# 位置 符合文字 群組

取代

什麼是正規表示式?

正規表示式(Regex)是用來描述文字的規則,例如「四個數字、一個連字號、兩個數字」。開發時常用來驗證輸入、搜尋日誌、擷取資料或大量取代文字。這個工具使用瀏覽器內建的 JavaScript 引擎,結果和瀏覽器、Node.js 裡 String.prototype.match 與 replace 的結果相同。

使用方式

  1. 輸入表示式(不用加前後的斜線),勾選需要的旗標。
  2. 貼上要測試的文字,每個符合處都會標示出來;相鄰的符合處用不同顏色,方便分辨。
  3. 表格列出每個符合處的位置與擷取群組。點一下某一列,就會在文字中選取該處。
  4. 填寫「取代為」就能預覽取代結果。群組用 $1、$<name>,整段符合文字用 $&。

範例:改變日期格式

表示式 (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) 會找出 2024-03-15 這類日期,並替三個部分命名。取代為 $<day>/$<month>/$<year> 的結果是:

15/03/2024

常用語法

語法意思
\d一個數字 0-9
\w英文字母、數字或底線
\s空白字元:空格、Tab、換行
.換行以外的任何字元(開啟 s:任何字元)
* + ?0 次以上、1 次以上、0 或 1 次
{2,4}2 到 4 次
^ $文字的開頭與結尾(開啟 m:每一行)
\b單字邊界
[abc] [^abc]a、b、c 其中一個/除此之外的字元
a|ba 或 b
(...)擷取群組:取代時用 $1、$2
(?:...)只分組、不擷取
(?<name>...)具名群組:取代時用 $<name>
(?=...) (?!...)後面接著/後面不是(前瞻)

常見問題

這裡用的是哪一種正規表示式?

JavaScript(ECMAScript),和瀏覽器、Node.js 相同。大部分語法在 Java、Python、PHP、Go 也通用,但有些差異:Python 的具名群組寫成 (?P<name>...);寫在表示式開頭的 (?i) 這類旗標這裡不支援,請改用旗標勾選框。

為什麼測試到一半顯示逾時?

有些表示式,特別是像 (a+)+$ 這種重複裡又有重複的寫法,會讓引擎嘗試極大量的組合(稱為「災難性回溯」)。這個工具在背景執行,超過 2 秒就停止,頁面不會卡住。請改寫表示式、避免巢狀重複,同樣的表示式也可能讓你的伺服器卡住。

反斜線要寫兩個嗎?

在這裡不用,直接輸入 \d。複製到 Java、C# 或 JavaScript 程式的字串裡(不是 /.../ 寫法)時,每個反斜線都要寫兩次,例如 "\\d{4}"。

文字會傳送到伺服器嗎?

不會。比對與取代全部在你的瀏覽器執行,可以放心拿不能外流的日誌或資料來測試。