一.建立正則表達的方式
1.字面量或稱為直接量(不需要用任何的關鍵字說明它是正規表示式,而是用斜槓來表示正規表示式的開始和結束)
eg: var reg = /^w/;
2.物件
eg: var reg = new RegExp("^w");
attentions:
1)因為簡潔方便,字面量建立的方式用的居多。
2)ES5規定正規表示式直接量的每次運算都返回新物件。
二、 正則物件的屬性和方法
1.屬性(5個)
ignoreCase:返回一個布林值,表示是否設定了i修飾符,該屬性只讀。
global:返回一個布林值,表示是否設定了g修飾符,該屬性只讀。
multiline:返回一個布林值,表示是否設定了m修飾符,該屬性只讀。
lastIndex:返回下一次開始搜尋的位置。該屬性可讀寫,但是隻在設定了g修飾符時有意義。
source:返回正規表示式的字串形式(不包括斜槓),該屬性只讀。
eg:
var reg = /Hello/ig;
console.log(reg.ignoreCase); //true
console.log(reg.global); //true
console.log(reg.multiline); //false
console.log(reg.lastIndex); //0
console.log(reg.source); //Hello
2.方法(3個)
test(): 檢索字串中的指定值。返回值是 true 或 false。
exec(): 如果發現匹配,就返回一個陣列,成員是每一個匹配成功的子字串,否則返回null。
compile(): 用於改變 RegExp
eg:
1) var reg1 = /Hello/ig;
console.log(reg1.test("Hello World!"));//true
console.log(reg1.lastIndex); //5
console.log(reg1.test("HELLO World!")); //false
//attention: 當正規表示式有g修飾時,每一次運算都會自動更新lastIndex,下次運算就從新的起點(lastIndex的值)開始尋求匹配,而不是把字串按從左到右去檢索。
reg1.lastIndex = 0;
console.log(reg1.test("HELLO World!")); //true
2) var reg1 = /Hello/ig;
var result = reg1.exec("Hello abc hello def");
console.log(result); //["Hello"]
console.log(result.input); //Hello abc hello def
console.log(result.index); //0
onsole.log(reg1.exec("Hello abc hello def")); //["hello"]
console.log("Hello abc hello def".match(reg1)); // ["Hello", "hello"]
attention:
exec方法的返回陣列還包含以下兩個屬性:
input:整個原字串。
index:整個模式匹配成功的開始位置(從0開始計數)。
3) var patt1=new RegExp("e");
console.log(patt1.test("The best things in life are free")); //true
patt1.compile("d");
console.log(patt1.test("The best things in life are free")); //false
三、語法
1.修飾符及其描述
i 執行對大小寫不敏感的匹配。
g 執行全域性匹配(查詢所有匹配而非在找到第一個匹配後停止)。
m 執行多行匹配。
2.元字元(Metacharacter)是擁有特殊含義的字元:
. 查詢單個字元,匹配除回車(
)、換行(
) 、行分隔符(u2028)和段分隔符(u2029)以外的所有字元。
cX 表示Ctrl-[X],其中的X是A-Z之中任一個英文字母,用來匹配控制字元。
[] 匹配退格鍵(U+0008),不要與混淆。
匹配換行鍵。
匹配Enter鍵。
匹配製表符tab(U+0009)。
v 匹配垂直製表符(U+000B)。
f 匹配換頁符(U+000C)。
匹配null字元(U+0000)。
xhh 匹配一個以兩位十六進位制數(x00-xFF)表示的字元。
uhhhh 匹配一個以四位十六進位制數(u0000-uFFFF)表示的unicode字元。
d 匹配0-9之間的任一數字,相當於[0-9]。
D 匹配所有0-9以外的字元,相當於[^0-9]。
w 匹配任意的字母、數字和下劃線,相當於[A-Za-z0-9_]。
W 除所有字母、數字和下劃線以外的字元,相當於[^A-Za-z0-9_]。
s 匹配空格(包括製表符、空格符、斷行符等),相等於[
vf]。
S 匹配非空格的字元,相當於[^
vf]。
匹配詞的邊界。
B 匹配非詞邊界,即在詞的內部。
3.位置字元
^ 表示字串的開始位置
$ 表示字串的結束位置
attentions:
1)當正規表示式用m(即multiline)修飾時,則^可以匹配每一行的行首,$可以匹配每一行的行末
2)^用於中括號表示取非,簡單地說,就是排除中括號中的所有元素。
4.選擇字元
豎線符號()在正規表示式中表示“或關係”(OR)
方括號([])所有可供選擇的字元都放在方括號內,比如[xyz] 表示x、y、z之中任選一個匹配。
連字元(-)表示字元的連續範圍
eg:
"a".match("ab"); //["a"]
"b".match("ab"); //["b"]
"ab".match("ab"); //["a"]
5.轉義符
正則模式中,需要用斜槓轉義的,一共有12個字元:^、.、[、$、(、)、、*、+、?、{和\。需要特別注意的是,如果使用RegExp方法生成正則物件,轉義需要使用兩個斜槓,因為字串內部會先轉義一次。如果是字面量生成,兩次轉義反而會弄巧成拙。
eg:
(new RegExp(`1+1`)).test(`1+1`)// false
(new RegExp(`1\+1`)).test(`1+1`)// true
/1\+1/.test(`1+1`) //false
/1+1/.test(`1+1`) //true
6.重複類
? 軟性量詞 出現零次或一次
* 軟性量詞 出現零次或多次(任意次)
+ 軟性量詞 出現一次或多次(至少一次)
{n} 硬性量詞 對應零次或者n次
{n,m} 軟性量詞 至少出現n次但不超過m次
{n,} 軟性量詞 至少出現n次(+的升級版)
參考連結:http://javascript.ruanyifeng….