前幾天寫(xiě)了一個(gè)很簡(jiǎn)陋的模板引擎,關(guān)于正則表達(dá)式瓢剿,我整理了一下,僅供以后再忘記的時(shí)候參考~
關(guān)于正則表達(dá)式(regular expression)
首先攻泼,它是一種工具鉴象,是一些用來(lái)匹配和處理文本的字符串,是正則表達(dá)式語(yǔ)言創(chuàng)建的只搁。主要應(yīng)用場(chǎng)景如下:
①查找特定的信息(搜索)
②查找并編輯特定的信息(替換)
正則表達(dá)式語(yǔ)言俭尖?
它并不是一種完備的程序設(shè)計(jì)語(yǔ)言,甚至算不上是一種能夠直接安裝并運(yùn)行的程序焰望。更準(zhǔn)確的說(shuō)已亥,正則表達(dá)式語(yǔ)言是內(nèi)置于其他語(yǔ)言或軟件產(chǎn)品里的“迷你”語(yǔ)言。幾乎所有語(yǔ)言都支持正則表達(dá)式語(yǔ)言震鹉,但捆姜,正則表達(dá)式與你正在使用的語(yǔ)言或者工具可以說(shuō)毫無(wú)相似之處。
元字符
所謂元字符我覺(jué)得是有特殊意義的字符浆兰,如果要用到字符本身珊豹,需要前面添加\進(jìn)行轉(zhuǎn)義。
元字符大致分為兩種:①用來(lái)匹配文本的(比如 . ) ?②正則表達(dá)式語(yǔ)法所要求的 (比如 ?[ 和 ?])
常見(jiàn)的元字符如下:
. 小圓點(diǎn)蜕便,用來(lái)表示任何一個(gè)單個(gè)的小于兩個(gè)字節(jié)長(zhǎng)度的字符
[ ] 定義一個(gè)字符集合忽妒。[ 和 ] 之間所有的字符都是該集合的組成部分兼贸,字符集合的匹配結(jié)果是能夠與該集合里任何一個(gè)成員相匹配的文本吃溅。
- 字符區(qū)間。主要用于[ ] 之間螺垢,比如[012345679]等價(jià)于[0-9]赖歌。當(dāng)然不僅限于于數(shù)字。關(guān)于“-”需要注意一下幾點(diǎn):①字符區(qū)間的首尾字符可以是ASCII字符表里的任意字符②避免尾字符小于首字符(例如[3-1])孽亲,會(huì)失效展父。③作為元字符只能用在 [ 和 ] ?之間,在字符集合以外的地方篮绿,"-"只是一個(gè)普通字符吕漂,能與"-"匹配,無(wú)需轉(zhuǎn)轉(zhuǎn)義惶凝。
^元字符,對(duì)于一個(gè)字符集合進(jìn)行取非匹配鲸睛。注意:^的效果作用于給定字符集合的所有字符或字符區(qū)坡贺,而不是僅限于緊跟在^字符后面的那個(gè)字符或字符區(qū)間遍坟。
\ ?對(duì)元字符進(jìn)行轉(zhuǎn)義晴股。
匹配空白元字符
\r 回車符 ? ? \n 換行符 ? ? \t 制表符
匹配數(shù)字,非數(shù)字的類元字符
\d 任何一個(gè)數(shù)字字符隔节,并不會(huì)匹配“10” ? <=> [0-9]
\D 任何一個(gè)非數(shù)字的字符
匹配字符數(shù)字,非字母數(shù)字的類元字符
\w 任何一個(gè)字符數(shù)字字符(大小寫(xiě)均可以)或者下劃線 ?<=> [a-z0-9A-9Z_]
\W 任何一個(gè)非字母數(shù)字字符或下劃線字符
匹配所有空白字符的類元字符
\s 任何一個(gè)空白字符 ?<=> [\f\n\r\t]
\S 任何一個(gè)非空白字符
重復(fù)匹配
匹配同一個(gè)字符(或字符集合)的多次匹配
+ 匹配一個(gè)或多個(gè)字符(至少一個(gè))
* 匹配0個(gè)或者多個(gè)字符
? 匹配零個(gè)或者一個(gè) ? ? ?\r? <=> [\r]?
{n} 匹配n次
{n ,m} 匹配n到m次
{n,} 至少匹配n次
注意:
* 和 + 都是所謂”貪婪型“的元字符瘾晃,匹配到的行為模式越多越好。相反幻妓,懶惰型是匹配盡可能少的字符。
位置匹配
\b 單詞邊界
^ 字符串開(kāi)頭邊界 ? ^是多用途的元字符强胰,只有出現(xiàn)在[ 和 ]中并緊跟[偶洋,是發(fā)揮求非作用
$ 字符串結(jié)尾邊界
(?m) 配合^和$ 使用距糖,換行符被視為一個(gè)字符串分隔符
關(guān)于元字符結(jié)束了,接下簡(jiǎn)單說(shuō)一下特別有用的子表達(dá)式
子表達(dá)式是一個(gè)大的表達(dá)式的一部分肾筐,把一個(gè)表達(dá)式劃分為多個(gè)子表達(dá)式的目的是為了把那些子表達(dá)式當(dāng)作一個(gè)獨(dú)立的元素來(lái)使用。子表達(dá)式必須用 ( 和 ) 括起來(lái)东亦。
回溯引用
\1 \2 ..... ?注意 在JS中 用$代替\
$' ?返回被匹配字符串前面的所有東西
$` ?返回被匹配字符串后面的所有東西
$+ 返回最后一個(gè)被匹配的子表達(dá)式
$& ?返回被匹配到的所有東西
前后查找
?= 向前查找 ? ? ??<=向后查找 ? ? ?注意:JS中不支持向后查找
JS中的正則表達(dá)式
①JS對(duì)正則表達(dá)式的支持來(lái)源于Perl語(yǔ)言
②命令選項(xiàng)有: g 全局典阵;i 不區(qū)分大小寫(xiě)镊逝; m 多行字符串; s 單行字符串撑蒜;
③POSIX字符類不被JS支持