正則表達式
正則表達式是用來匹配字符串中的字符組合的模式。
創建正則表達式有以下兩種方式:
使用正則表達式字面量,如:
Var re = /ab/;
調用RegExp對象的構造函數,如:
var re = new RegExp("ab+c");
RegExp第二個參數flags爲可選參數,flags的值可爲i,g,m中的其中一個或者多個的組合。g(global)是全局標誌。如果設置了這個標誌,對某個文本執行搜索和替換操作時,將對文本中所有匹配的部分起作用。如果不設置這個標誌,則僅搜索和替換最早匹配的內容。i(ignoreCase)是忽略大小寫標誌。如果設置了這個標誌,進行匹配比較時,將忽略大小寫。m(multiLine)是多行標誌。如果不設置這個標誌,那麼元字符“^”只與整個被搜索字符串的開始位置相匹配,而元字符“$”只與被搜索字符串的結束位置相匹配。如果設置了這個標誌,“^”還可以與被搜索字符串中的“\n”或“\r”之後的位置(即下一行的行首)相匹配,而“$”還可以與被搜索字符串中的“\n”或“\r”之後的位置(即下一行的行尾)相匹配。1、簡單模式
簡單的模式是有你找到的直接匹配所構成的。比如,/abc/這個模式就匹配了在一個字符串中,僅僅字符'abc'同時出現並按照這個順序
2、使用特殊字符
字符 |
含義 |
\在字符串裏面是一個轉義字符。用於將一些特殊字符進行轉義。 |
|
匹配輸入的開始。如果多行標示被設置爲true,同時匹配換行後緊跟的字符。 比如,/^A/並不會匹配/^A/中的‘A’,但是會匹配“An E”中的‘A’。 當這個字符出現在一個字符集合模式的第一個字符的時候,它將會有不同的意義。 比如,/[^a-z\s]/會匹配“my 3 sisters”中的‘3’,即當^出現在字符集合模式時,代表以該字符集合中的字符爲 開頭(字符集的裏面的字符可以出現0次或多次),返回的時開頭字符之後的第一個字符。如果/[^a-z\s]+/則返回 開頭後的字符一直到再出現[a-z\s]字符集中的字符爲止(或者字符串結束爲止)。 |
|
匹配輸入的結束,如果多行標示被設置爲true,同時會匹配換行前緊跟的字符。 比如,/t$/並不會匹配“eater”中的‘t’,但是會匹配“eat”中的。 |
|
匹配前一個字符0次或者是多次。 比如,/bo*/會匹配“A ghost boooooed”中的'boooo'和‘A bird warbled’中的‘b’, 但是在“A goat grunted”中將不會匹配任何東西。 |
|
匹配前面一個字符1次或者多次,和{1,}有相同的效果。 如,/a+/匹配了在“candy”中的a,和在"caaaaaaandy"中所有的a。 |
|
匹配前面一個字符0次或者1次,和{0,1}有相同的效果。 比如,/e?le?/匹配“angel”中的‘el’,和"angle"中的‘le’以及“oslo”中的'l'。 如果'?'緊跟在在任何量詞*, + , ?,或者是{}的後面,將會使量詞變成非貪婪模式(匹配最少的次數), 和默認的貪婪模式(匹配最多的次數)正好相反。 比如,使用/\d+/非全局的匹配“123abc”將會返回“123”,如果使用/\d+?/,那麼久只會匹配到“1”。 同時運用在向前斷言,在本表的x(?=y)和x(?!y)中有描述。 |
|
(The decimal point) matches any single character except the newline character. (小數點)匹配任何除了新一行字符的任何單個字符。 比如,/.n/將會匹配‘nay, an apple is on the tree’中的‘an’和‘on’,但是不會匹配'nay'。 |
|
匹配‘x’並且記住匹配項。這個被叫做捕獲括號。 比如,/(foo)/匹配和記住了“foo bar”中的'foo'。匹配到子字符串可以通過結果數組的[1],...,[n]元素進行訪問。 |
|
匹配'x'但是不記住匹配項。這種被叫做非捕獲括號。匹配到的子字符串不能通過結果數組的[1],...,[n]進行訪問。 |
|
匹配'x'僅僅當'x'後面跟着'y'.這種叫做向後查詢。 比如,/Jack(?=Sprat)/會匹配到'Jack'僅僅當它後面跟着'Sprat'。 /Jack(?=Sprat|Frost)/匹配‘Jack’僅僅當它後面跟着'Sprat'或者是‘Frost’。 但是‘Sprat’和‘Frost’都不是匹配結果的一部分。 |
|
匹配'x'僅僅當'x'後面不跟着'y',這個被叫反向向前查找。 比如,/\d+(?!\.)/匹配一個數字僅僅當這個數字後面沒有跟小數點的時候。 正則表達式/\d+(?!\.)/.exec("3.141")匹配‘141’但是不是‘3.141’ |
|
匹配‘x’或者‘y’。 比如,/green|red/匹配“green apple”中的‘greem’和“red apple”中的‘red’ |
|
n是一個正數,匹配了前面一個字符剛好發生了n次。 比如,/a{2}/不會匹配“candy”中的'a',但是會匹配“caandy”中所有的a,和“caaandy”中的前兩個'a'。 |
|
匹配前面一個字符n到m次 |
|
字符集,即匹配其中任意一個字符即可 |
|
匹配不包含在該字符集中的其他字符 |
|
匹配單詞的開始或結束. 比如:/\babc/匹配abcd中的abc,但是不匹配aabc中的abc |
|
匹配不是單詞開頭或結束的位置. 比如:\/Bbc/B\匹配abcd中的bc,但比匹配abc或者bcd中的bc |
|
匹配數字字符 |
|
匹配非數字字符 |
|
換頁符 (U+000C). |
|
換行符 (U+000A). |
|
回車符 (U+000D). |
|
匹配空格 |
|
匹配非空格 |
|
製表符 (U+0009). |
|
垂直製表符(U+000B). |
|
匹配數字、字母、下劃線 |
|
匹配非數字、字母、下劃線 |
|
當n爲數字時,表示對第n個匹配結果的引用,如: /apple(,)\sorange\1/ 匹配"apple, orange, cherry, peach."中的 'apple, orange,',此處\1表示第 一個匹配結果,即逗號 |
|
匹配null |
使用正則表達式
正則表達式可以通過RegExp的方法:test和exec和String的方法:match、search、replace、split方法使用。具體如下:
方法 |
描述 |
exec |
RegExp的方法,用於搜索匹配的字符,返回匹配字符數組。 |
test |
RegExp的方法,用於測試正則表達式是否匹配string中的字符,如果有匹配則返回true,否則返回false。 |
match |
String的方法,執行搜索匹配的字符,當有匹配時,返回匹配字符的數組,否則返回null。 |
search |
String的方法,返回匹配字符在string中的索引,如無匹配返回-1。如:"saaaaa".search(/a/g)返回1,返回匹配的第一個字符的爲止 |
replace |
String的方法,將字符串中匹配的字符替換成要替換的字符 |
split |
String的方法,以字符串以字符或者正則表達式匹配的字符爲分割符,將字符串分割爲數組 |
使用括號匹配的字符
1、 正則表達式中使用
/a(b+)c\1/.exec(“abbcbbsdf”),\1表示第一個括號即(b+)的匹配字符,此處爲bb
2、 replace中使用
使用美元符號$加數字,如$1表示第一個括號匹配的字符。如:
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2,$1");
console.log(newstr);
//此處$1表示第一個括號匹配的結果即john,$2表示第二個括號裏的匹配結果即Smith.