概述:
在一篇文章中,當要查找一個字符串(由多個字符組成)或者一個字符時,在搜索框中輸入,而後進行搜 索,就可獲得結果。
可是,當你查找一些複雜格式的字符串時,好比,查找如下字符串時,以"m"開頭,緊接着兩個任意 字符,再緊接着一個"n"字符
,這時,在搜索框中咱們如何輸入搜索字符串?經過鍵盤敲入第一個字符"m"後,緊接着的任意兩個字 符,如何敲入?
這個,嗯,嗯,嗯。。。。,咱們就會卡殼了。這時候,咱們就要使用正則表達式進行 搜索。
正則表達式能夠對任意字符串進行搜索、替換等操做。git
元字符(metacharacters):
\ : the backslash
^ : the caret
$ : the dollar sign
. : the period or dot
| : the vertical bar or pipe symbol
? : the question mark
* : the asterisk or star
+ : the plus sign
( : the opening parenthesis
) : the closinig parenthesis
[ : the opening square bracket
] : the closing square bracket
{ : the opening curly brace
} : the closing curly brace正則表達式
以上特殊的字符被稱爲元字符,在正則表達式中有着特殊的意義。若是你想在文本中這搜索這些元字符,
那麼必須在元字符前面添加反斜線( \ ),來告訴正則表達式引擎,把元字符做爲普通字符對待。例如:
你要查找:1+1=2,那麼你的正則表達式就要寫成:1\+1=2curl
"." 句點元字符
只匹配一個字符。這個字符幾乎是任意一個字符,好比字母、標點符號、數字、下劃線等,同時也不區分 大小寫。
注意,不匹配換行符 "\n", 而且句點字符與 "*" 或者 "+"字符寫在一塊兒時,搜索引擎會進行貪婪匹 配。
也就是說它會匹配儘量的字符,這有可能與你的預期不符。測試
"\w" 元字符(小寫)
只匹配一個字符。這個字符是字母、數字和下劃線。
注意,不匹配 標點符號、空白符號
"\W" 元字符(大寫)
只匹配一個字符。這個字符是 \w 不匹配的字符,意思與 \w 相反。換句話說,就是匹配任何非字母、 非數字、非下劃線的字符搜索引擎
"\d" 元字符(小寫)
只匹配一個字符。這個字符是 0 到 9 的數字。url
"\D" 元字符(大寫)
只匹配一個字符。這個字符是 \d 不匹配的字符,意思與 \d 相反。換句話說,就是匹配任何非數字的 字符
"\s" 元字符(小寫)
只匹配一個字符。這個字符是空白字符,包括一個空格符( )、一個製表符(\t)、一個換行符(\n)
"\S" 元字符(小寫)
只匹配一個字符。這個字符是 \s 不匹配的字符,意思與 \s 相反,也就是非空白字符spa
字符類(Character Classes or Character Sets)
字符類就是使用"[]"括起來的一些無序字符,正則表達式引擎在匹配時,從字符類中把一個一個字符抽出對象
來進行匹配。假如表達式爲:Mo[eao]n,那麼搜索引擎就會以 "Moen" 或者 "Moan" 或者 "Moon"進行 模式匹配。
字符類有一些簡寫形式,表示某一個範圍的字符,這些字符必須是連續的,好比:
[a-z]表示小寫字母 a 到 z,意思與 [abcdefghijklmnopqrstuvwxyz]等價
[r-t]表示小寫字母 r 到 t,意思與 [rst]等價
[A-Z]表示小寫字母 A 到 Z,意思與 [ABCDEFGHIJKLMNOPQRSTUVWXYZ]等價
[0-9]表示數字,意思與 [0123456789]等價blog
"^" 元字符
當"^" 元字符出如今字符類的第一個位置時,表示取反的意思,例如:
[^acm] ,表示匹配非 a 或 c 或 m 的字符。
當"^" 元字符出如今字符類的其餘位置時,表示普通的"^"字符,例如:
[a^cm] ,表示匹配 a 或 ^ 或 c 或 m 的字符。
當"^" 元字符出如今非字符類時,表示匹配一個字符串或一行的開始位置
"$" 元字符
匹配一個字符串或一行的結束位置
"\b" 元字符
匹配一個單詞的邊界(出如今一個單詞的開始或者結束位置)
"\<" 和 "\>" 元字符
匹配一個單詞的開始和結束位置
"()"分組介紹
使用小括號"(abc)、(abc|abcdg)"括起來的字符串就稱爲一個分組。索引
分組有一些隱式變量($一、$二、$3 等),可供隨後的替換、重複等操做使用,例如:
正則表達式爲:"((\w(\d{2}))(( )(\d{2})))"
搜索的文本內容爲:"A22 33"
那麼執行匹配以後的結果以下:
$1, 引用的分組爲 "((\w(\d{2}))(( )(\d{2})))" , 匹配結果爲:"A22 33"
$2, 引用的分組爲 "(\w(\d{2}))", 匹配結果爲:"A22"
$3, 引用的分組爲 "(\d{2})", 匹配結果爲:"22"
$4, 引用的分組爲 "(( )(\d{2}))", 匹配結果爲:" 33"
$5, 引用的分組爲 "( )", 匹配結果爲:" "
$6, 引用的分組爲 "(\d{2})", 匹配結果爲:"33"
反向引用在分組中的應用
有時候須要查找重複單詞的操做,這時候就須要反向引用操做。反向引用,意思是引用前面匹配的分組。
例如:"M(o)\1n lig(h|e)t",第一個分組是"(o)",其後的 "\1" 表示反響引用第一個分組的匹配結果
反向引用的格式:一個反斜線加一個數字,好比 "\2" 表示引用第二個分組
"?:" 在分組中的應用
表示正則表達式引擎在返回最終的匹配結果時,刪除"?:"所在分組的匹配結果。去掉不須要的匹配項。
例如,"(The)(?:[ea])(on)",匹配的結果以下,
$1, 引用的分組爲 "(The)"
$2, 引用的分組爲 "(on)"
向前查找和向後查找
注意,此應用的關鍵在於,出如今指定匹配項以後的字符序列不會被正則表達式引擎返回。
(?: ...) , 非捕獲組
(?= ...) , 確定式向前查找
(?! ...) , 否認式向前查找
(?<= ...) , 確定式向後查找
(?<! ...) , 否認式向後查找
POSIX 字符類,[:alnum:] 等價於 [A-Za-z0-9],[:digit:] 等價於 [0-9], JS 中不支持此寫法
JavaScript 支持的元字符
JavaScript 正則表達式有兩種寫法
一、 var reg = new RegExp(param1[, param2]);
param1 參數表示正則表達式的模式
param2 參數是可選的,值爲「gmi」中的一個或者多個,
g 表示 global, 進行全局匹配
m 表示 multiline,進行多行匹配
i 表示 ignoreCase, 匹配時不區分大小寫
二、var reg = /[abc]{3}/[gmi];
JavaScript 正則表達式對象的主要方法
一、test()
測試一個字符串是否與模式匹配?只要存在一次匹配就返回 true;沒有匹配項返回 false;
二、exec()
從一個字符串中獲取匹配項。
JavaScript 中的 string 對象有三個方法與正則表達式配合使用 一、match() 獲取匹配項,與 exec()方法功能相同 二、search() 查找是否存在匹配項?與 test() 方法功能相同 三、replace() 有兩個參數, 第一個參數是 RegExp 對象, 第二個參數是一個字符串,用來替換查找出來的匹配項