JS引用型別中的RegExp型別——輕鬆記住正則表示式
該博文對於已經理解了正則表示式的比較管用
(一)
在JavaScript中,可以使用RegExp()內建函式建立正則表示式物件。正則表示式直接量也被定義為包含在一對斜槓(/)之間的字元 如: var expression = / pattern / flags;
其中模式(pattern)部分可以使任何簡單或者複雜的正則表示式如字元類,限制符,分組等,每個正則表示式可以帶有一個或者多個標誌(flags),用以表明正則表示式的行為。正則表示式的匹配模式支援的三個標誌:
g:表示全域性模式(global),即模式將被應用於所有字串而非發現一個而停止
i:表示不區分大小寫(ease-insensitive)模式,在確定匹配想時忽略模式與字串的大小寫
m:表示多行(multiline)模式,即在確定匹配項時忽略模式與字串的大小寫
(二)
1.括號:
小括號:分組
中括號:[判斷字元位上內容]
大括號:表示出現了多少次
2.預定義字元:
. : 任意字元。
\d:數字
\D : 非數字。[^0-9]
\w : 字母或數字[a-zA-Z_0-9]
\W:非字母且非數字
\s :匹配一個空格字元,包括:空格,換行,回車,tab,等價於[ \n\r\t\f]
\S :匹配非空格字元,\s的相反 等價於 [^ \f\n\r\t\v]。
3.邊界字元:
^ : 行開頭
$ : 行結尾
\b : 單詞邊界
\B:非單詞邊界
4.特殊字元
\n:換行
\r:回車
\f:換頁
5.數量詞:必須結合內容
X?: X內容出現零次或一次
X*: X內容出現零次或多次
X+: X內容出現一次或多次
X{n}:X內容出現n次
X{n,}:X內容出現至少n次
X{n,m}:X內容出現n到m次
(三)
RegExp實列方法:是否匹配
(1),test():regexp.test(str)—— 返回true false
match():str.match(regexp)——返回一個數組
(2),另一個稍微複雜點的方法:exec()方法:
-
該方法是專門為捕獲組而設計的,接收一個引數,即應用模式的字串,返回的是包含第一個匹配項資訊的陣列,或者在沒有匹配項的情況下返回null。
-
返回的陣列雖然是Array的例項,但包含兩個額外的屬性:index和input,
其中index表示匹配項在字串中的位置,input表示應用正則表示式的字串。 -
在返回的陣列中,第一項是與整個模式匹配的字串,其他項是與模式中捕獲組匹配的字串(如果模式中沒有捕獲組,則該陣列只包含一項)。
-
所謂的捕獲組:例如使用小括號指定一個子表示式後(前面說過小括號是用來分組的),匹配這個子表示式的文字,也就是此分組捕獲的內容,可以在表示式或其他程式中做進一步處理。預設情況下每個捕獲組會自動擁有一個組號,規則是:從左向右,以分組的左括號為標誌,第一個出現的分組號為1,第二個為2,以此類推。
-
非捕獲組只匹配結果,但不捕獲結果,也不會分配組號,當然也不能在表示式中和程式中做進一步處理。
例如:
var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;//該方式屬於正則表示式的字面量模式
/*上面的模式pattern表示text要滿足的是字串內容首先是mom,然後and dad and baby可以緊接著出現0次或1次,再就是其中的and baby 可以出現0次或1次。最後該模式應用於整個text字串,且不分大小寫*/
var matches = pattern.exec(text);
console.log(matches);//Array(3)
console.log(matches.index);//0
console.log(matches.input);//“mom and dad and baby”
console.log(matches[0]);//"mom and dad and baby"
console.log(matches[1]);//"and dad and baby"
console.log(matches[2]);//"and baby"
上面程式碼輸出結果如下圖:
解析:上面這個例子中的模式包含兩個捕獲組:按照規則從左往右第一個捕獲組是"and dad"或者"and dad and baby",第二個捕獲組是"and baby"。當把字串傳入exec()方法之後,發現了一個匹配項。因為整個text字串本身與模式匹配,所以返回陣列matches的index的屬性值為0。返回的陣列中的第一項是匹配的整個的字串,第二項包含與第一個捕獲組匹配的內容,第三項包含與第二個捕獲組匹配的內容。
(四)
前面例子是以字面量形式來定義的正則表示式,另一種建立正則表示式的方式是使用RegExp建構函式,它接收兩個引數:要匹配的字串模式,標誌字串(可選)。如下:
var pattern1 = /[bc]at/i;
var pattern2 = new RegExp("[bc]at","i");
解析:
-
上面的pattern1和pattern2是兩個完全等價的正則表示式,需要注意的是傳遞給RegExp建構函式的引數是字串,所以某些情況下要對字串進行雙重轉義
-
所有的元字元都必須雙重轉義,所有的元字元如下
( [ { \ ^ $ | ) ? * + . ] } -
那些已經轉義過的字元也還需要轉義,例如\n(字元\在字串中通常被轉義為\,而在正則表示式的字串中就會變成\\)。
【更為詳細內容可參考原文】
原文:https://blog.csdn.net/qq_34477549/article/details/52819449