1. 匹配單個(gè)字符
1.1 匹配純文本
在原始文本中查找目標(biāo)文本
/as/.test("asd"); // true
/ad/.test("asd"); // false
多個(gè)匹配結(jié)果
一般正則表達(dá)式默認(rèn)匹配第一個(gè)結(jié)果,提供不同的匹配模式供選擇。
"asdasd".match(/as/g); // ["as", "as"]
大小寫
一般正則表達(dá)式會(huì)提供一個(gè)機(jī)制,選擇區(qū)分或者不區(qū)分大小寫。
/A/.test("asd"); // false
/A/i.test("asd"); // true
1.2 匹配任意字符
點(diǎn)號(hào)(.)可以匹配任何一個(gè)單個(gè)字符。
/a.d/.test("asd"); // true
/a.d/.test("afd"); // true
1.3 匹配特殊字符
對(duì)于點(diǎn)號(hào),星號(hào)等在正則表達(dá)式中有特殊含義的字符,需要在前面加一個(gè)反斜杠(\)來進(jìn)行轉(zhuǎn)移。
“\“本身就是”\“。
/a\.d/.test("asd"); // false
/a\.d/.test("a.d"); // true
2.匹配一組字符
字符集合用來匹配特定的字符和字符區(qū)間。
2.1 匹配一組字符中的一個(gè)
用中括號(hào)([])來定義字符集合,中括號(hào)間的字符都是該集合的組成部分,字符集和的匹配結(jié)果是能夠和集合中的任意一個(gè)成員相匹配的文本。
/[abc]/.test("asd"); // true
/[abc]/.test("qsd"); // /false
2.2 字符集合區(qū)間
用連字符(-)來定義字符區(qū)間。
/[0-9]a/.test("2a"); // true
/[a-z]a/.test("aa"); // true
字符區(qū)間的首尾字符可以使ASCⅡ字符表里的任意字符,且匹配是按照字符表編碼的決定的。需要注意連字符兩邊的字符順序。
/[9-1]a/.test("2a"); // error
連字符只在中括號(hào)之間有效,在其他地方作為普通字符,不需要加反斜杠。
/-[a-z]/.test("-a"); // true
2.3 取非匹配
用元字符^對(duì)一個(gè)字符集合進(jìn)行取非操作。即匹配字符集合以外的字符。
/[^a-z]/.test("asd"); // fasle
注意:雖然^放在方括號(hào)里面,但是是作用于整個(gè)字符區(qū)間的。
3. 元字符匹配
3.1 匹配元字符自身
用反斜杠(\)轉(zhuǎn)義。
/\./.test("."); // true
3.2 匹配空白字符
正則表達(dá)式中用來表示空白字符的元字符如下:
| 元字符 | 說明 |
|---|---|
| [\b] | 回退 |
| \f | 換頁符 |
| \n | 換行符 |
| \r | 回車符 |
| \t | 制表符 |
| \v | 垂直制表符 |
注意:不同操作系統(tǒng)中對(duì)于文本行結(jié)束,文本結(jié)束的表示不同。例如,在Windows用\r\n表示文本行結(jié)束。Unix和Linxu系統(tǒng)用一個(gè)換行符來結(jié)束文本行。
3.3 匹配特定字符類型
3.3.1 匹配數(shù)字,非數(shù)字
| 元字符 | 說明 |
|---|---|
| \d | 任何一個(gè)數(shù)字字符(等價(jià)于[0-9]) |
| \D | 任何一個(gè)非數(shù)字字符(等價(jià)于[^0-9]) |
/\d/.test("1") ; // true
/\D/.test("1") ; // false
可以看到用小寫d匹配數(shù)字,大寫D匹配相反的非數(shù)字,后面的其他類元字符也是如此。
3.3.2 匹配字母、數(shù)字和下劃線,非字母、數(shù)字和下劃線
| 元字符 | 說明 |
|---|---|
| \w | 任何一個(gè)字母,數(shù)字,下劃線(等價(jià)于[a-zA-Z0-9_]) |
| \W | 任何一個(gè)非字母,數(shù)字,下劃線(等價(jià)于[^a-zA-Z0-9_]) |
/\w/.test("a"); \\ true
/\W/.test("a"); \\ false
3.3.3 匹配空白字符,非空白字符
| 元字符 | 說明 |
|---|---|
| \s | 任何一個(gè)空白字符(等價(jià)于[\f\n\r\t\v]) |
| \S | 任何一個(gè)非空白字符(等價(jià)于[^\f\n\r\t\v]) |
/\s/.test(" "); // true
/\S/.test("a"); // true
注意:退格字符[\b]元字符不在類元字符\s的覆蓋范圍內(nèi)。
3.3.4 匹配十六進(jìn)制或者八進(jìn)制數(shù)值
1. 使用十六進(jìn)制匹配
正則表達(dá)式中用前綴\x來表示十六進(jìn)制數(shù)值。
例如,\x0A對(duì)應(yīng)于ASCⅡ字符10(換行符),等價(jià)于\n 。
2.使用八進(jìn)制匹配
正則表達(dá)式用用前綴\0表示八進(jìn)制數(shù)值。
例如,\011表示ASCⅡ字符9(制表符),等價(jià)于\t。
3.4 POSIX字符類
很多語言的正則表達(dá)式支持POSIX表達(dá)式。
注意:JavaScript不支持。
| 字符類 | 說明 |
|---|---|
| [:alnum:] | 任何一個(gè)字母或數(shù)字(等價(jià)于[a-zA-Z0-9]) |
| [:alpha:] | 任何一個(gè)字母(等價(jià)于[a-zA-Z]) |
| [:blank:] | 空格或者制表符(等價(jià)于[ \t]) |
| [:cntrl:] | ASCⅡ控制字符(ASCⅡ0到31,再加上ASCⅡ127 |
| [:digit:] | 任何一個(gè)數(shù)字(等價(jià)于[0-9]) |
| [:graph:] | 任何一個(gè)可打印字符,不包括空格 |
| [:lower:] | 任何一個(gè)小寫字母(等價(jià)于[a-z]) |
| [:print:] | 任何一個(gè)可打印字符 |
| [:punct:] | 既不屬于[:alnum:]也不屬于[:cntrl:]的任何一個(gè)字符 |
| [:space:] | 任何一個(gè)空白字符,包括空格(等價(jià)于[ \t\r\n\v\f]) |
| [:upper:] | 任何一個(gè)大寫字母(等價(jià)于[A-Z]) |
| [:xdigit:] | 任何一個(gè)十六進(jìn)制數(shù)字(等價(jià)于[a-fA-F0-9]) |
下一篇:重復(fù)匹配