斷言 :表示一個(gè)匹配在某些條件下發(fā)生。斷言包含先行斷言、后行斷言和條件表達(dá)式。
字符類(lèi) :區(qū)分不同類(lèi)型的字符,例如區(qū)分字母和數(shù)字。
組和范圍:表示表達(dá)式字符的分組和范圍。
量詞 :表示匹配的字符或表達(dá)式的數(shù)量。
UniCode轉(zhuǎn)義 :基于 unicode 字符屬性區(qū)分字符。例如大寫(xiě)和小寫(xiě)字母、數(shù)學(xué)符號(hào)和標(biāo)點(diǎn)。
? 非貪婪 、貪婪模式 ;
如果?緊跟在任何量詞 *、 +、? 或 {} 的后面,將會(huì)使量詞變?yōu)榉秦澙罚ㄆヅ浔M量少的字符),和缺省使用的貪婪模式(匹配盡可能多的字符)正好相反。例如,對(duì) "123abc" 使用 /\d+/ 將會(huì)匹配 "123"(貪婪模式),而使用 /\d+?/ 則只會(huì)匹配到 "1" (非貪婪模式)。
(x)
括號(hào),它在正則表達(dá)式中常用作記憶設(shè)備。即這部分所匹配的字符將會(huì)被記住以備后續(xù)使用
其中括號(hào)被稱(chēng)為捕獲括號(hào)。
模式/(foo) (bar) \1 \2/中的 '(foo)' 和 '(bar)' 匹配并記住字符串 "foo bar foo bar" 中前兩個(gè)單詞。模式中的\1和\2表示第一個(gè)和第二個(gè)被捕獲括號(hào)匹配的子字符串,即foo和bar,匹配了原字符串中的后兩個(gè)單詞。注意\1、\2、...、\n是用在正則表達(dá)式的匹配環(huán)節(jié),詳情可以參閱后文的 \n 條目。而在正則表達(dá)式的替換環(huán)節(jié),則要使用像$1、$2、...、$n這樣的語(yǔ)法,例如,'bar foo'.replace(/(...) (...)/, '$2 $1')。$&表示整個(gè)用于匹配的原字符串。
image.png
交換字符串位置 demo
image.png
x(?=y) 匹配'x'僅僅當(dāng)'x'后面跟著'y'.這種叫做先行斷言
例如,/Jack(?=Sprat)/會(huì)匹配到'Jack'僅當(dāng)它后面跟著'Sprat'。/Jack(?=Sprat|Frost)/匹配‘Jack’僅當(dāng)它后面跟著'Sprat'或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配結(jié)果的一部分。
(?<=y)x 匹配'x'僅當(dāng)'x'前面是'y'.這種叫做后行斷言。
例如,/(?<=Jack)Sprat/會(huì)匹配到' Sprat '僅僅當(dāng)它前面是' Jack '。/(?<=Jack|Tom)Sprat/匹配‘ Sprat ’僅僅當(dāng)它前面是'Jack'或者是‘Tom’。但是‘Jack’和‘Tom’都不是匹配結(jié)果的一部分。
x(?!y) 僅僅當(dāng)'x'后面不跟著'y'時(shí)匹配'x',這被稱(chēng)為正向否定查找。
例如,僅僅當(dāng)這個(gè)數(shù)字后面沒(méi)有跟小數(shù)點(diǎn)的時(shí)候,/\d+(?!.)/ 匹配一個(gè)數(shù)字。正則表達(dá)式/\d+(?!.)/.exec("3.141")匹配‘141’而不是‘3.141’
(?<!y)x 僅僅當(dāng)'x'前面不是'y'時(shí)匹配'x',這被稱(chēng)為反向否定查找。
例如, 僅僅當(dāng)這個(gè)數(shù)字前面沒(méi)有負(fù)號(hào)的時(shí)候,/(?<!-)\d+/ 匹配一個(gè)數(shù)字。
/(?<!-)\d+/.exec('3') 匹配到 "3".
/(?<!-)\d+/.exec('-3') 因?yàn)檫@個(gè)數(shù)字前有負(fù)號(hào),所以沒(méi)有匹配到。

