正則方法
search() 方法 用于檢索字符串中指定的子字符串酥泞,或檢索與正則表達(dá)式相匹配的子字符串债蜜,并返回子串的起始位置娇唯。
replace() 方法 用于在字符串中用一些字符替換另一些字符赞庶,或替換一個與正則表達(dá)式匹配的子串霎槐。
test() 方法用于檢測一個字符串是否匹配某個模式宦焦,如果字符串中含有匹配的文本须妻,則返回 true埂伦,否則返回 false煞额。
exec() 方法用于檢索字符串中的正則表達(dá)式的匹配。該函數(shù)返回一個數(shù)組,其中存放匹配的結(jié)果立镶。如果未找到匹配壁袄,則返回值為 null。
split() 用來把一個字符串拆分為多個子串的String方法媚媒。
match() 用來匹配一個字符串的String方法嗜逻。
正則規(guī)則
- 通常情況下正則會返回第一個匹配結(jié)果
g (意思是'global',全局), 返回一個包含所有匹配結(jié)果的數(shù)組
- 通常情況下正則匹配區(qū)分大小寫
i 強制執(zhí)行一次不區(qū)分大小寫搜索
- 英文.
. (英文句號),可以匹配任何一個單個字符、字母缭召、數(shù)字栈顷、或者.本身。除了\符嵌巷。 可以連續(xù)出現(xiàn),也可以以間隔形式出現(xiàn)萄凤。
- 元字符
\ (轉(zhuǎn)移符號) 這個符號有特殊含義,并不是字符本身的含義。 [和] (匹配的字符集合) 只負(fù)責(zé)定義字符集合,字符集合的匹配結(jié)果是能夠與該集合里的任意一個成員相匹配的文本搪哪。
- -(連字符)
- [0-9] [a-z] [A-Z] 不能[3-1]這樣寫 只有寫在[和]里表示連接符,寫下其他地方只表示普通字符,所以不用轉(zhuǎn)義靡努。
- 取非匹配[^]
[^] 除去[]里匹配的字符 [^0-9] 匹配任何不是數(shù)字的字符
- 空白字符串
[\b] 回退(并刪除)一個字符 \f 換頁符 \n 換行符 \r 回車符 \t 制表符(Tab鍵) \v 垂直制表符
- 字符類
\d 任何一個數(shù)字字符 \D 任何一個非數(shù)字字符 \w 任何一個字母數(shù)字字符或下劃線字符 \W 任何一個非字母數(shù)字字符或下劃線字符 \s 任何一個空白字符 \S 任何一個非空白字符
- 匹配進(jìn)制
\x 十六進(jìn)制前綴,\x0A對應(yīng)ASCII字符10(換行符),與\n一樣 \0 八進(jìn)制前綴,\011對應(yīng)于ASCII字符9(制表符),與\t一樣
重復(fù)匹配
- [+ ,* ,? ,]
+ 匹配一個或多個字符。 [0-9+] 表示匹配0-9之間的數(shù)組和+號字符晓折。 * 匹配零個或多個字符惑朦。 ? 只能匹配一個字符(或字符處理)的零次或一次出現(xiàn),只匹配前面的字符。 {和} 可以設(shè)定重復(fù)次數(shù)漓概⊙拢可以是重復(fù)的值,也可以是一個區(qū)間胃珍。 {3} 剛好重復(fù)三次梁肿。 {2,4} 重復(fù)2-4次。 {2,} 至少重復(fù)兩次觅彰。
貪婪型元字符和對應(yīng)的懶惰型
貪婪型元字符 匹配的越多越好
-
對應(yīng)的懶惰型 只匹配一個,適可而止
貪婪型元字符 懶惰型元字符 * *? + +? {n,} {n,}?
位置匹配
- 單詞邊界
\b 用來匹配一個單詞的開始或結(jié)尾,它匹配的位置是\w和\W之間的位置吩蔑。 \B 不匹配一個單詞邊界。
- 字符串邊界
^ 字符串開頭 $ 字符串結(jié)尾
子表達(dá)式
- (和)
(和) 會被視為獨立的元素 (19|20) 19或20,|會把前后的看做一個整體
回溯引用
-
JS里使用\來標(biāo)識回溯引用(\與$配合進(jìn)行替換操作時例外)
回溯引用指的是模式的后半部分引用在前半部分中定義的子表達(dá)式 [ ]+(\w+)[ ]+\1 \1的內(nèi)容與(\w+)的一樣 - 回溯引用只能用來引用模式里的子表達(dá)式(用(和)闊起來的正則表達(dá)式) - 回溯引用匹配通常從1開始計數(shù)(如\1缔莲、\2,等等)哥纫。\0可以用來代表整個正則表達(dá)式霉旗。 - 回溯引用也有不足之處,添加或刪除子表達(dá)式,會使子表達(dá)式的相對位置改變痴奏。
-
回溯中的替換操作
$ $0代表整個正則匹配的
-
大小寫轉(zhuǎn)換的元字符
js好像沒用
元字符 說明 \E 結(jié)束\L或\U轉(zhuǎn)換 \l 把下一個字符轉(zhuǎn)換成小寫 \L 把\L到\E之間的字符全部轉(zhuǎn)換為小寫 \u 把下一個字符轉(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é)果,只是這個結(jié)果的字節(jié)長度永遠(yuǎn)是0厌秒。 長度是可變的读拆。
- 向后查找
?<= 可以把<=看做箭頭,他指向文本閱讀方向的后方。 只是固定長度鸵闪。
-
查找操作符
操作符符 說 明 (?=) 正向前查找 (?!) 負(fù)向前查找 (?<=) 正向后查找 (?<!) 負(fù)向后查找 支持向前查找的檐晕,一般都支持正向前查找和負(fù)向前查找。向后查找也是如此。 負(fù)向查找實際上是取非的作用辟灰。 (?=\$)\d 以$開頭的數(shù)字 (?!\$)\d 不以$開頭的數(shù)字
-
非捕獲性分組匹配
?: 非捕獲性分組工作模式下分組(?:)會作為匹配校驗个榕,并出現(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']
插入條件
-
回溯引用條件
回溯引用條件只在一個前面的子表達(dá)式搜索成功的情況下才允許使用一個表達(dá)式西采。
?(1) 1代表第幾個子表達(dá)式(第幾個括號),0代表整個正則表達(dá)式 var reg = /(<[Aa]\s*[^>]*>)(?(1)\s*<\/[Aa]>)/; 只有第一個括號里有匹配結(jié)果,即?(1)有值,才會繼續(xù)它后面的匹配
-
前后查找條件
前后查找條件只有一個向前查找或向后查找取得成功的情況下才允許一個表達(dá)式被使用继控。
?(?=) ()里放入前后查找表達(dá)式,當(dāng)前后查找表達(dá)式匹配到才繼續(xù)匹配械馆。