前幾天寫了一個很簡陋的模板引擎,關于正則表達式,我整理了一下,僅供以后再忘記的時候參考~
關于正則表達式(regular expression)
首先,它是一種工具,是一些用來匹配和處理文本的字符串,是正則表達式語言創建的。主要應用場景如下:
①查找特定的信息(搜索)
②查找并編輯特定的信息(替換)
正則表達式語言?
它并不是一種完備的程序設計語言,甚至算不上是一種能夠直接安裝并運行的程序。更準確的說,正則表達式語言是內置于其他語言或軟件產品里的“迷你”語言。幾乎所有語言都支持正則表達式語言,但,正則表達式與你正在使用的語言或者工具可以說毫無相似之處。
元字符
所謂元字符我覺得是有特殊意義的字符,如果要用到字符本身,需要前面添加\進行轉義。
元字符大致分為兩種:①用來匹配文本的(比如 . ) ?②正則表達式語法所要求的 (比如 ?[ 和 ?])
常見的元字符如下:
. 小圓點,用來表示任何一個單個的小于兩個字節長度的字符
[ ] 定義一個字符集合。[ 和 ] 之間所有的字符都是該集合的組成部分,字符集合的匹配結果是能夠與該集合里任何一個成員相匹配的文本。
- 字符區間。主要用于[ ] 之間,比如[012345679]等價于[0-9]。當然不僅限于于數字。關于“-”需要注意一下幾點:①字符區間的首尾字符可以是ASCII字符表里的任意字符②避免尾字符小于首字符(例如[3-1]),會失效。③作為元字符只能用在 [ 和 ] ?之間,在字符集合以外的地方,"-"只是一個普通字符,能與"-"匹配,無需轉轉義。
^元字符,對于一個字符集合進行取非匹配。注意:^的效果作用于給定字符集合的所有字符或字符區,而不是僅限于緊跟在^字符后面的那個字符或字符區間。
\ ?對元字符進行轉義。
匹配空白元字符
\r 回車符 ? ? \n 換行符 ? ? \t 制表符
匹配數字,非數字的類元字符
\d 任何一個數字字符,并不會匹配“10” ? <=> [0-9]
\D 任何一個非數字的字符
匹配字符數字,非字母數字的類元字符
\w 任何一個字符數字字符(大小寫均可以)或者下劃線 ?<=> [a-z0-9A-9Z_]
\W 任何一個非字母數字字符或下劃線字符
匹配所有空白字符的類元字符
\s 任何一個空白字符 ?<=> [\f\n\r\t]
\S 任何一個非空白字符
重復匹配
匹配同一個字符(或字符集合)的多次匹配
+ 匹配一個或多個字符(至少一個)
* 匹配0個或者多個字符
? 匹配零個或者一個 ? ? ?\r? <=> [\r]?
{n} 匹配n次
{n ,m} 匹配n到m次
{n,} 至少匹配n次
注意:
* 和 + 都是所謂”貪婪型“的元字符,匹配到的行為模式越多越好。相反,懶惰型是匹配盡可能少的字符。
位置匹配
\b 單詞邊界
^ 字符串開頭邊界 ? ^是多用途的元字符,只有出現在[ 和 ]中并緊跟[,是發揮求非作用
$ 字符串結尾邊界
(?m) 配合^和$ 使用,換行符被視為一個字符串分隔符
關于元字符結束了,接下簡單說一下特別有用的子表達式
子表達式是一個大的表達式的一部分,把一個表達式劃分為多個子表達式的目的是為了把那些子表達式當作一個獨立的元素來使用。子表達式必須用 ( 和 ) 括起來。
回溯引用
\1 \2 ..... ?注意 在JS中 用$代替\
$' ?返回被匹配字符串前面的所有東西
$` ?返回被匹配字符串后面的所有東西
$+ 返回最后一個被匹配的子表達式
$& ?返回被匹配到的所有東西
前后查找
?= 向前查找 ? ? ??<=向后查找 ? ? ?注意:JS中不支持向后查找
JS中的正則表達式
①JS對正則表達式的支持來源于Perl語言
②命令選項有: g 全局;i 不區分大小寫; m 多行字符串; s 單行字符串;
③POSIX字符類不被JS支持