正則方法
search() 方法 用于檢索字符串中指定的子字符串,或檢索與正則表達(dá)式相匹配的子字符串,并返回子串的起始位置。
replace() 方法 用于在字符串中用一些字符替換另一些字符,或替換一個(gè)與正則表達(dá)式匹配的子串。
test() 方法用于檢測一個(gè)字符串是否匹配某個(gè)模式,如果字符串中含有匹配的文本,則返回 true,否則返回 false。
exec() 方法用于檢索字符串中的正則表達(dá)式的匹配。該函數(shù)返回一個(gè)數(shù)組,其中存放匹配的結(jié)果。如果未找到匹配,則返回值為 null。
split() 用來把一個(gè)字符串拆分為多個(gè)子串的String方法。
match() 用來匹配一個(gè)字符串的String方法。
正則規(guī)則
- 通常情況下正則會返回第一個(gè)匹配結(jié)果
g (意思是'global',全局), 返回一個(gè)包含所有匹配結(jié)果的數(shù)組 - 通常情況下正則匹配區(qū)分大小寫
i 強(qiáng)制執(zhí)行一次不區(qū)分大小寫搜索 - 英文.
. (英文句號),可以匹配任何一個(gè)單個(gè)字符、字母、數(shù)字、或者.本身。除了\符。 可以連續(xù)出現(xiàn),也可以以間隔形式出現(xiàn)。 - 元字符
\ (轉(zhuǎn)移符號) 這個(gè)符號有特殊含義,并不是字符本身的含義。 [和] (匹配的字符集合) 只負(fù)責(zé)定義字符集合,字符集合的匹配結(jié)果是能夠與該集合里的任意一個(gè)成員相匹配的文本。 - -(連字符)
- [0-9] [a-z] [A-Z] 不能[3-1]這樣寫 只有寫在[和]里表示連接符,寫下其他地方只表示普通字符,所以不用轉(zhuǎn)義。 - 取非匹配[^]
[^] 除去[]里匹配的字符 [^0-9] 匹配任何不是數(shù)字的字符 - 空白字符串
[\b] 回退(并刪除)一個(gè)字符 \f 換頁符 \n 換行符 \r 回車符 \t 制表符(Tab鍵) \v 垂直制表符 - 字符類
\d 任何一個(gè)數(shù)字字符 \D 任何一個(gè)非數(shù)字字符 \w 任何一個(gè)字母數(shù)字字符或下劃線字符 \W 任何一個(gè)非字母數(shù)字字符或下劃線字符 \s 任何一個(gè)空白字符 \S 任何一個(gè)非空白字符 - 匹配進(jìn)制
\x 十六進(jìn)制前綴,\x0A對應(yīng)ASCII字符10(換行符),與\n一樣 \0 八進(jìn)制前綴,\011對應(yīng)于ASCII字符9(制表符),與\t一樣
重復(fù)匹配
- [+ ,* ,? ,]
+ 匹配一個(gè)或多個(gè)字符。 [0-9+] 表示匹配0-9之間的數(shù)組和+號字符。 * 匹配零個(gè)或多個(gè)字符。 ? 只能匹配一個(gè)字符(或字符處理)的零次或一次出現(xiàn),只匹配前面的字符。 {和} 可以設(shè)定重復(fù)次數(shù)??梢允侵貜?fù)的值,也可以是一個(gè)區(qū)間。 {3} 剛好重復(fù)三次。 {2,4} 重復(fù)2-4次。 {2,} 至少重復(fù)兩次。
貪婪型元字符和對應(yīng)的懶惰型
貪婪型元字符 匹配的越多越好
-
對應(yīng)的懶惰型 只匹配一個(gè),適可而止
貪婪型元字符 懶惰型元字符 * *? + +? {n,} {n,}?
位置匹配
- 單詞邊界
\b 用來匹配一個(gè)單詞的開始或結(jié)尾,它匹配的位置是\w和\W之間的位置。 \B 不匹配一個(gè)單詞邊界。 - 字符串邊界
^ 字符串開頭 $ 字符串結(jié)尾
子表達(dá)式
- (和)
(和) 會被視為獨(dú)立的元素 (19|20) 19或20,|會把前后的看做一個(gè)整體
回溯引用
-
JS里使用\來標(biāo)識回溯引用(\與$配合進(jìn)行替換操作時(shí)例外)
回溯引用指的是模式的后半部分引用在前半部分中定義的子表達(dá)式 [ ]+(\w+)[ ]+\1 \1的內(nèi)容與(\w+)的一樣 - 回溯引用只能用來引用模式里的子表達(dá)式(用(和)闊起來的正則表達(dá)式) - 回溯引用匹配通常從1開始計(jì)數(shù)(如\1、\2,等等)。\0可以用來代表整個(gè)正則表達(dá)式。 - 回溯引用也有不足之處,添加或刪除子表達(dá)式,會使子表達(dá)式的相對位置改變。 -
回溯中的替換操作
$ $0代表整個(gè)正則匹配的 -
大小寫轉(zhuǎn)換的元字符
js好像沒用
元字符 說明 \E 結(jié)束\L或\U轉(zhuǎn)換 \l 把下一個(gè)字符轉(zhuǎn)換成小寫 \L 把\L到\E之間的字符全部轉(zhuǎn)換為小寫 \u 把下一個(gè)字符轉(zhuǎn)換為大寫 \U 把\U到\E之間的字符全部轉(zhuǎn)換為大寫 var str = "<h1>abc</h1>" str1 = str.replace(/\<h1\>(.*?)\<\/h1\>/g,function(){ let arr = [...arguments] console.log(arr); return arr[1].toUpperCase() }); console.log(str1);
前后查找
- 向前查找(向左查找)
?= 以?=開頭的子表達(dá)式,需要匹配的文本跟在=的后面。 會返回結(jié)果,只是這個(gè)結(jié)果的字節(jié)長度永遠(yuǎn)是0。 長度是可變的。 - 向后查找
?<= 可以把<=看做箭頭,他指向文本閱讀方向的后方。 只是固定長度。
-
查找操作符
操作符符 說 明 (?=) 正向前查找 (?!) 負(fù)向前查找 (?<=) 正向后查找 (?<!) 負(fù)向后查找 支持向前查找的,一般都支持正向前查找和負(fù)向前查找。向后查找也是如此。 負(fù)向查找實(shí)際上是取非的作用。 (?=\$)\d 以$開頭的數(shù)字 (?!\$)\d 不以$開頭的數(shù)字 -
非捕獲性分組匹配
?: 非捕獲性分組工作模式下分組(?:)會作為匹配校驗(yàn),并出現(xiàn)在匹配結(jié)果字符里面,但不作為子匹配返回。 捕獲性分組:會返回結(jié)果以及其他子表達(dá)式所匹配的結(jié)果集合 非捕獲性分組:返回結(jié)果以及子表達(dá)式里沒有?:的結(jié)果集合例:
var str1 = '000aaa111'; var pattern = /([a-z]+)(\d+)/; // 捕獲性分組匹配 var pattern2 = /(?:[a-z]+)(?:\d+)/; // 非捕獲性分組匹配 console.log(pattern.exec(str1)) // 捕獲性分組匹配結(jié)果 ['aaa111','aaa','111'] console.log(pattern2.exec(str1)) // 非捕獲性分組匹配結(jié)果 ['aaa111']
插入條件
-
回溯引用條件
回溯引用條件只在一個(gè)前面的子表達(dá)式搜索成功的情況下才允許使用一個(gè)表達(dá)式。
?(1) 1代表第幾個(gè)子表達(dá)式(第幾個(gè)括號),0代表整個(gè)正則表達(dá)式 var reg = /(<[Aa]\s*[^>]*>)(?(1)\s*<\/[Aa]>)/; 只有第一個(gè)括號里有匹配結(jié)果,即?(1)有值,才會繼續(xù)它后面的匹配 -
前后查找條件
前后查找條件只有一個(gè)向前查找或向后查找取得成功的情況下才允許一個(gè)表達(dá)式被使用。
?(?=) ()里放入前后查找表達(dá)式,當(dāng)前后查找表達(dá)式匹配到才繼續(xù)匹配。