JavaScript 的正規式(Regular expressions)是一個內建的物件,函數為 RegExp,宣告如下:
re = new RegExp("pattern", "flag")
re = /pattern/flag
pattern 代表正規表示法來顯示的字串
flag 則是比對的方式。flag 的值有三種:
re = new RegExp("pattern", "flag")
re = /pattern/flag
pattern 代表正規表示法來顯示的字串
flag 則是比對的方式。flag 的值有三種:
g:全域比對(Global match)
i:忽略大小寫(Ignore case)
gi:全域比對並且忽略大小寫
gi:全域比對並且忽略大小寫
正規式
|
說明及範例
|
比對不成立之字串
|
/a/
|
含字母 "a" 的字串,例如:"ab",
"bac", "cba"
|
"xyz"
|
/a./
|
含字母 "a" 以及其後任一個字元的字串,例如:"ab", "bac"
|
"a",
"ba"
|
/^xy/
|
以 "xy" 開始的字串,例如:"xyz",
"xyab"
|
"axy",
"bxy"
|
/xy$/
|
以 "xy" 結尾的字串,例如:"axy",
"abxy"
|
"xya",
"xyb"
|
[13579]
|
包含 "1" 或 "3" 或 "5" 或 "7" 或 "9" 的字串,例如:"a3b",
"1xy"
|
"y2k"
|
[0-9]
|
含數字之字串
|
不含數字之字串
|
[a-z0-9]
|
含數字或小寫字母之字串
|
不含數字及小寫字母之字串
|
[a-zA-Z0-9]
|
含數字或字母之字串
|
不含數字及字母之字串
|
b[aeiou]t
|
"bat",
"bet", "bit", "bot", "but"
|
"bxt",
"bzt"
|
[^0-9]
|
不含數字之字串
|
含數字之字串
|
[^aeiouAEIOU]
|
不含母音之字串
|
含母音之字串
|
[^\^]
|
不含 "^" 之字串,例如:"xyz",
"abc"
|
"xy^",
"a^bc"
|
正規表示法的特定字元
|
說明
|
等效的正規表示法
|
\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]
|
正規表示法
|
說明
|
/a?/
|
零或一個 a
|
/a+/
|
一或多個 a
|
/a*/
|
零或多個 a
|
/a{4}/
|
四個 a
|
/a{5,10}/
|
五至十個 a
|
/a{5,}/
|
至少五個 a
|
/a{,3}
|
至多三個 a
|
/a.{5}b/
|
a 和 b中間夾五個(非換行)字元
|
字元
|
說明
|
簡單範例
|
\
|
避開特殊字元
|
/A\*/ 可用於比對 "A*",其中 * 是一個特殊字元,為避開其特殊意義,所以必須加上 "\"
|
^
|
比對輸入列的啟始位置
|
/^A/ 可比對 "Abcd" 中的 "A",但不可比對 "aAb"
|
$
|
比對輸入列的結束位置
|
/A$/ 可比對 "bcdA" 中的 "A",但不可比對 "aAb"
|
*
|
比對前一個字元零次或更多次
|
/bo*/ 可比對 "Good boook" 中的 "booo",亦可比對 "Good bk" 中的 "b"
|
+
|
比對前一個字元一次或更多次,等效於 {1,}
|
/a+/ 可比對 "caaandy" 中的 "aaa",但不可比對 "cndy"
|
?
|
比對前一個字元零次或一次
|
/e?l/ 可比對 "angel" 中的 "el",也可以比對 "angle" 中的 "l"
|
.
|
比對任何一個字元(但換行符號不算)
|
/.n/ 可比對 "nay, an apple is on the
tree" 中的 "an" 和 "on",但不可比對"nay"
|
(x)
|
比對 x 並將符合的部分存入一個變數
|
/(a*) and (b*)/ 可比對 "aaa and bb" 中的 "aaa" 和 "bb",並將這兩個比對得到的字串設定至變數 RegExp.$1 和 RegExp.$2。
|
xy
|
比對 x 或 y
|
/a*b*/g 可比對 "aaa and bb" 中的 "aaa" 和 "bb"
|
(x)
|
此名為存入括號。
|
(abc) (def) RegExp.$1 = "abc"; RegExp.$2 = "def"; |
(?:x)
|
計算符合 x,但是不存入結果陣列。
|
str = "Hello Wendy"; str.replace(/(?:e.).*(d.)/,'x'); RegExp.$1 = dy; RegExp.$2 = ; |
x(?=y)
|
x 符合的條件要加上 x 之後必須接y。
|
str = "Hello Wendy"; str.replace(/e(?=l)/gi,'x'); Hxllo Wendy |
x(?!y)
|
x 符合的條件要加上 x 之後不可接y。
|
str = "Hello Wendy"; str.replace(/e(?!l)/gi, 'x' ); Hello Wxndy |
x|y
|
符合 x 或 y 都可以。
|
str='Hello Wendy'; str.replace(/e(?=(l|n))/gi,'x'); str.replace(/(he|lo|dy)/gi,'12'); Hxllo Wxndy 12l12 Wen12 |
{n}
|
比對前一個字元 n 次,n 為一個正整數
|
/a{3}/ 可比對 "lllaaalaa" 其中的 "aaa",但不可比對 "aa"
|
{n,}
|
比對前一個字元至少 n 次,n 為一個正整數
|
/a{3,}/ 可比對 "aa aaa aaaa" 其中的 "aaa" 及 "aaaa",但不可比對 "aa"
|
{n,m}
|
比對前一個字元至少 n 次,至多m 次,m、n 均為正整數
|
/a{3,4}/ 可比對 "aa aaa aaaa aaaaa" 其中的 "aaa" 及 "aaaa",但不可比對"aa" 及 "aaaaa"
|
[xyz]
|
比對中括弧內的任一個字元
|
/[ecm]/ 可比對 "welcome" 中的 "e" 或 "c" 或 "m"
|
[^xyz]
|
比對不在中括弧內出現的任一個字元
|
/[^ecm]/ 可比對 "welcome" 中的 "w"、"l"、"o",可見出其與 [xyz] 功能相反。(同時請同學也注意 /^/ 與 [^] 之間功能的不同。)
|
[\b]
|
比對退位字元(Backspace character)
|
可以比對一個 backspace ,也請注意 [\b] 與 \b 之間的差別
|
\b
|
比對英文字的邊界,例如空格
|
例如 /\bn\w/ 可以比對 "noonday" 中的 ‘no’ ;
/\wy\b/ 可比對 "possibly yesterday." 中的 ‘ly’ |
\B
|
比對非「英文字的邊界」
|
例如, /\w\Bn/ 可以比對 "noonday" 中的 ‘on’ ,
另外 /y\B\w/ 可以比對 "possibly yesterday." 中的 ‘ye’ |
\cX
|
比對控制字元(Control character),其中 X 是一個控制字元
|
/\cM/ 可以比對一個字串中的 control-M
|
\d
|
比對任一個數字,等效於 [0-9]
|
/[\d]/ 可比對由 "0" 至 "9" 的任一數字但其餘如字母等就不可比對
|
\D
|
比對任一個非數字,等效於 [^0-9]
|
/[\D]/ 可比對 "w" "a"… 但不可比對如 "7" "1" 等數字
|
\f
|
比對 form-feed
|
若是在文字中有發生 "換頁" 的行為則可以比對成功
|
\n
|
比對換行符號
|
若是在文字中有發生 "換行" 的行為則可以比對成功
|
\r
|
比對 carriage return
|
|
\s
|
比對任一個空白字元(White space character),等效於 [ \f\n\r\t\v]
|
/\s\w*/ 可比對 "A b" 中的 "b"
|
\S
|
比對任一個非空白字元,等效於 [^ \f\n\r\t\v]
|
/\S/\w* 可比對 "A b" 中的 "A"
|
\t
|
比對定位字元(Tab)
|
|
\v
|
比對垂直定位字元(Vertical tab)
|
|
\w
|
比對數字字母字元(Alphanumerical characters)或底線字母("_"),等效於 [A-Za-z0-9_]
|
/\w/ 可比對 ".A _!9" 中的 "A"、"_"、"9"。
|
\W
|
比對非「數字字母字元或底線字母」,等效於 [^A-Za-z0-9_]
|
/\W/ 可比對 ".A _!9" 中的 "."、" "、"!",可見其功能與 /\w/ 恰好相反。
|
\ooctal
|
比對八進位,其中octal是八進位數目
|
/\oocetal123/ 可比對與八進位的ASCII中 "123" 所相對應的字元值。
|
\xhex
|
比對十六進位,其中hex是十六進位數目
|
/\xhex38/ 可比對與 16進位的ASCII中 "38" 所相對應的字元。
|
注意事項:
RegExp(pattern,
flag) 的方式來建立正規式物件時,若 pattern 包含以反斜線開頭
的特殊字元(例如 \d、\w、\s 等)時,我們必須再加上一個反斜線來保留其特殊意義。例如:
的特殊字元(例如 \d、\w、\s 等)時,我們必須再加上一個反斜線來保留其特殊意義。例如:
re = /\d+\s\w+/g
以 RegExp 為主的等效表示法為:
re = new RegExp("\\d+\\s\\w+", "g");
另外網站上也提供線上測試正規法:
資料來源:
thx for share! nice article
回覆刪除