iT邦幫忙

2

Regex 筆記

js

參考資料

大綱

  • Regex 實用工具
  • 使用情境
  • 常用旗幟 flag (g/i/m)
  • 常用 特殊標點字元 ( . , ^ , $ , \ , |)
  • 中括號 [ ] 用法 (限定範圍)
  • 限定出現次數 ( * , + , {} )
  • 常用 縮寫 (\d數字,\w,\s空白字元)
  • 一些範例

Regex 工具

  • Regexr
  • Regex 101
  • Regex 左上角可選擇 程式語言 (Regex語法大多可共通)
  • 上兩者可用來測試 Regex 與 結果,並含有 CheatSheet
  • Regex CheatSheet

使用情境

  • 表單驗證 pattern 屬性
  • 取代文字
  • 搜尋關鍵字 (VSCode內也可搜尋檔案用)

常用的旗幟 flag (i/g/m)

  • g 全域 (Global)
  • i 忽略大小寫 (Case-Insensitive)
  • m 多行文字 (multiline) 範例如下
  const str = 'testA\ntestB\ntestC'

  // HeyA testB testC  (只會取待第一個)
  console.log(str.replace(/test/, 'Hey'))
  // HeyA HeyB HeyC    (取待所有找到的)
  console.log(str.replace(/test/g, 'Hey'))
  // HeyA testB testC  (找test開頭的,此時會無法找到各行開頭)
  console.log(str.replace(/^test/g, 'Hey'))
  // HeyA HeyB HeyC  (因此要找各行開頭,必須待上 m flag)
  console.log(str.replace(/^test/gm, 'Hey'))

常用 特殊標點字元

  • (.) 點號 代表 任意字元,亦可為無
  • (^test) 代表以 test 開頭
  • (test$) 代表以 test 結尾
  • () 反斜線 代表 跳脫字元
  • ( 98 | 95 | 100 ) 直槓 代表 OR

中括號 [ ] 用法 (限定範圍)

  • [b-z] 小寫的 b 到 z
  • [a-zA-Z] 同時包含大小寫的 a 到 z
  • [4-9] 4 到 9
  • [a-z0-9] 中括號可以包括多個範圍
  • [^0-5] 在中括號中使用 ^ 代表 "排除"

限定出現次數 ( . / + / {} )

  • (*) 米字號 代表 任意 次數
  • (+) 加號 代表 一 或 一次以上
  • (?) 問號 代表 零 或 一次
  • {2} 大括號 代表 限定次數
  • {2,} 逗號 代表 至少要超過 2 個以上
  • {,3} 逗號 代表 至多 3 個以上
  • {2,9} 逗號 代表 至少 2 個 至多 9 個
  const data = 'test\ntest1\ntest12\ntest123'
  // test+任意 1 個字元
  const Plus1 = /test./gm   

  // test 後可有 任意 個字元(可無)
  const Any = /test.*/gm    

  // test 後需有 至少 1 個字元
  const Over1 = /test.+/gm   

  // test 後 可為 無字元 或 一個字元
  const OneOrNone = /test.?/gm  

  // test 後需有 2 個字元
  const WithTwo = /test.{2}/gm 

  // test 後至少有 2 個字元以上 (含2個)
  const OverTwo = /test.{2,}/gm 

  // test 後至少 有 2 個字元 至多 9 個字元
  const OverTwoLessNine = /test.{2,9}/gm 

常用 縮寫 (\d Digital \w Word \s Space)

  • \d 代表 數字 等同於 [0-9]
  • \D 代表 非數字 等同於 [^0-9]
  • \w 代表 數字、字母、底線 等同 [a-zA-Z0-9_]
  • \W 代表 非 \w 等同 [^a-zA-Z0-9_]
  • \s 代表 空白字元 等同 [\r\t\n\f]
  • \S 代表 非 空白字元 等同 [^\r\t\n\f]
  • \t 代表 TAB 鍵
  • \n 代表 換行

範例

  • 電話號碼
  • 網址
  // 以 09 開頭 後接 8 個數字
  const PhoneRegex = /^09[0-9]{8}$/

  // ? 表前一個字可有可無 反斜線 和 . 要用跳脫字元
  const urlRegex = /https?:\/\/[a-zA-Z0-9\.\/]+/

尚未有邦友留言

立即登入留言