正則表達式的一(yī)些匹配規則
時間:2020-07-18 作者:管理員(yuán) 點擊:639
正則表達式的一(yī)些匹配規則
時間:2020-07-18 作者:管理員(yuán) 點擊:639
大(dà)部分(fēn)字符在正則表達式中(zhōng),就是字面的含義,比如 /a/ 匹配 a, /b/ 匹配b。這種隻表示它字面量含義的被稱爲字面量字符。
除了字面量,還有一(yī)些字符有特殊含義,不代表字面意思,被稱爲元字符
1,點字符(.)
點字符匹配除回車(chē)(\r)、換行(\n)、行分(fēn)隔符(\u2028)和分(fēn)段符(\u2029)之外(wài)的所有字符 注:碼點大(dà)于0xFFFF的Unicode字符不能被匹配,因爲會被認爲是兩個字符。
2,位置字符
^ 表示字符串的開(kāi)始位置, $ 表示字符串的結束位置。
3,選擇符(|)
豎線符号在正則中(zhōng)表示 ‘或關系’ , 即匹配其中(zhōng)之一(yī)即可。
正則中(zhōng)那些有特殊含義的元字符,如果要匹配它們本身,就要在前面加反斜杠。 比如要匹配 +, 就必須寫成 \+;
在正則中(zhōng),需要反斜杠轉義的一(yī)共有12個字符: ^ . [ $ ( ) | * + ? { \\ 注:如果使用RegExp方法生(shēng)成正則,轉義需要加兩個斜杠,因爲字符串需要先轉義一(yī)次。
\r 匹配回車(chē)符
\t 匹配制表符 tab
\n 匹配換行符
\v 匹配垂直制表符
\f 匹配換頁符
\0 匹配null字符
字符類表示有一(yī)系列字符可供選擇,隻要匹配其中(zhōng)一(yī)個就可以。所有可供選擇的字符放(fàng)在中(zhōng)括号内,比如[abc] 表示 a b c之中(zhōng)任選一(yī)個。
1,脫字符(^)
如果方括号内的第一(yī)個字符爲 ^ , 則表示取反。 [^]表示匹配一(yī)切字符。
2,連字符(-)
對于連續序列的字符,可以用-來進行簡寫。 a-z 0-9 A-Z -u4e00-\u9fa5
\d 匹配0-9的數字, 相當于[0-9]
\D 匹配非0-9的字符。 相當于[^0-9]
\w 匹配任意字母數字下(xià)劃線。 相當于[0-9a-zA-Z_]
\W 相當于\w取反
\s 匹配空格(包括換行符、制表符、空格符), 相當于[ \t\r\n\v\f]
\S 相當于\s取反
\b 匹配單詞邊界
\B 匹配非單詞邊界,即在詞的内部
模式的匹配次數,使用大(dà)括号{ }表示,{n}表示重複n次,{n,}表示至少重複n次,{n,m}表示重複不少于n次,不多于m次。
量詞符用來設定某個模式出現的次數。
?問号表示某個模式出現0次或1次, 等同于{0, 1};
* 星号表示出現0次或多次,等同于{0, }
+ 加号表示出現1次或多次, 等同于{1, }
量詞符默認情況下(xià)都是最大(dà)可能匹配,即匹配到不能匹配爲止,這種模式就叫貪婪模式
/a+/ 表示匹配1個或多個a,那麽到底會匹配幾個a呢? 因爲默認的是貪婪模式,所以會一(yī)直匹配到後面不是a爲止。
如果想将貪婪模式改爲非貪婪模式,可以在量詞後面加一(yī)個問号。這時候一(yī)旦滿足條件,就不再往下(xià)匹配了。
*?表示某個模式出現0次或者多次,采用非貪婪模式
+?表示模式出現1次或者多次,采用非貪婪模式
g 表示全局匹配
i 表示忽略大(dà)小(xiǎo)寫
m 表示多行模式。會修改^和$的行爲。 加了m修飾符後,^和$會識别換行符( \n )
1,正則中(zhōng)的括号()表示分(fēn)組匹配,括号中(zhōng)的模式表示分(fēn)組中(zhōng)的内容。
在正則表達式内部, 還可以使用 \n 來引用括号匹配的内容, n是從1開(kāi)始,表示對應順序的括号
/(.)b(.)\1b\2/.test('abcabc'); \1匹配了第一(yī)個括号的a, \2匹配了第二個括号的c
2,非捕獲組
(?:x)稱爲非捕獲組,表示不返回該組匹配的内容。
3,先行斷言
x(?=y)稱爲先行斷言。x隻有在y前面才匹配,y不計入匹配結果中(zhōng)。
4,先行否定斷言
x(?!y) 爲先行否定斷言。 x隻有不在y前面才匹配。
用通俗的語句來解釋上面的這些:
x(?! y): x隻有不在y前面才匹配
x(?=a): 表示在a的前面 才匹配。
x(?<= a): 表示a的後面才匹配
x(?<! a): 表示需要不匹配某個模式, 與 (?!a)相反