1. 程式人生 > >JS引用型別中的RegExp型別——輕鬆記住正則表示式

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