Skip to content

Regular Expression

Regular Expression 用 // 包住,有三種用途:

  1. 尋找資料
  2. 驗證資料
  3. 抽取資料
var value = 'abc'
const regexp = /^[a-zA-Z]*$/;
console.log(regexp.test(value));

// 輸出結果
true

練習網站:https://regex101.com/


常見的元字符

.:匹配任何單個字符,除了換行符 \n
^:匹配輸入字符串的開頭。
$:匹配輸入字符串的結尾。
*:匹配前一個字符零次或多次。
+:匹配前一個字符一次或多次。
?:匹配前一個字符零次或一次。
\:轉義字符,用於匹配特殊字符。
[...]:字符組,匹配中括號內的任何單個字符。
[^...]:否定字符組,匹配除了中括號內的任何單個字符之外的任何字符。
():捕獲組,用於捕獲匹配的字串。
|:管道符號,用於匹配多個模式之一。


包含特定字串

包含 'xyz' 連續字串就符合,大小寫有區別。

/xyz/

'xyz123' //符合
'XYZ123' //不符合
/xyz/i

'xyz123' //符合
'XYZ123' //符合

包含數字或字母

使用 [] 包住的字串,只要其中一個字符合就可以。

# 數字
[0-9]

# 字母
[a-z]  //小寫
[A-Z]  //大寫

包含中文或全型

# 僅常見中文漢字
[\u4e00-\u9fa5]

# 匹配不屬於 ASCII 字符範圍
[^\x00-\x7F]

更簡潔的表示

包含數字

\d

'1'  //符合
'12' //符合
\d\d

'1'  //不符合
'12' //符合

包含數字 / 英文 / 底線

\w
又等於
[a-zA-Z0-9_]

Note

改成大寫 \W 代表反義:不是英文字母與數字與底線\D 同理。

包含任意字元

.  //沒錯只有一個點

包含空白 / tab / 換行

\s

限制字串長度

^ 開頭 $ 做結尾。

# 手機號碼
/^09\d\d\d\d\d\d\d\d$/

'0912345678'  //符合
'09123456789' //不符合

重複項目

想要重複幾次加上 {}

  • {8} 代表一定要 8 個。
  • {8,10} 8~10 個都可以。
  • {8,} 含 8 個以上。
# 09後面要有連續8碼數字
/^09\d{8}$/

包含一個以上的字串

在字串類型後面加上 +,一個以上的數字用 \d+,或是一個以上的英文 [a-z]+,以此類推。

# A開頭Z結尾,中間是任意數字
/^A\d+Z$/

A123Z// 符合
AB123Z// 不符合

Note

想要符合零個以上,可以用 *


擷取符合條件的部分字串

在想要擷取的資料範圍加上 (),加上 ? 表示配對 0~1 次即可。

var email = 'aaa@yahoo.com.tw';
var re = /^.+@(.+)\./
// \.表示跳脫.字元
var result = email.match(re)
console.log(result[1])

# 輸出結果
'yahoo.com'
var email = 'aaa@yahoo.com.tw';
var re = /^.+@(.+?)\./
// \.表示跳脫.字元
var result = email.match(re)
console.log(result[1])

# 輸出結果
'yahoo'

參考資料
Regular Expression 入門指南
日宏的技術分享