JavaScript 正則測試

用瀏覽器裡的 JavaScript 正則做測試,標出符合的部分、列出擷取群組,也可以試取代。

測的是瀏覽器裡的 JavaScript 正則

這是 ECMAScript 的寫法,前端校驗和很多 JSON Schema 用的就是它,不是 PHP 的 PCRE。從 preg_match 文檔抄來的式子,如果用了只有 PCRE 才有的寫法,在這裡會失敗。當前瀏覽器支援後行斷言。

全局匹配一直開著,所以你會看到全部命中,而不只是第一處。替換使用 JavaScript 的規則:$1、$2,兩個 $$ 表示一個美元符號。

表達式已經確認可用、只想把匹配摳出來時,用更短的 正則提取。

怎麼用

  1. 表達式不要加斜線。\d+ 就夠了,不要寫成 /\d+/g。標誌用複選框。
  2. i 忽略大小寫。m 讓 ^ 和 $ 對每一行生效。s 讓點號匹配換行。u 打開 Unicode,寫 \p{L} 或處理表情時需要它。
  3. 命中會高亮,並列出位置和每個捕獲組。這裡的 ∅ 表示這一組沒有參與匹配。
  4. 打開替換後,$1 是第一組。結果是整段文字替換之後的樣子,不是隻列出命中的碎片。
  5. 不合法時會顯示瀏覽器給出的原因。常見的是括號沒閉合,或末尾多了一個反斜線。

寫法備忘

  • . 預設不匹配換行,除非打開 s。\d 數字,\w 單詞字元,\s 空白。大寫是相反集合。
  • + 一次或多次,* 零次或多次,? 可有可無。再加一個 ? 變成非貪婪,例如 +?。
  • (...) 會捕獲。(?:...) 只分組、不捕獲。頁面上的編號從 1 開始,和 $1 一致。
  • 在 JavaScript 裡,不開 u 時 \w 只是 [A-Za-z0-9_],不包含漢字和帶音標的字母。

常見問題

編輯器裡能用,這裡不行。

先看方言。很多編輯器用 PCRE,\w 會包含重音字母。這裡預設不包含。

會把標籤頁卡死嗎?

像 (a+)+ 這種嵌套量詞,遇到很長又匹配失敗的文本會非常慢。頁面在 5000 處命中後停止列舉,但沒法把這種表達式變快。把範圍寫窄一些。