1. 程式人生 > >JaveScript 中的正則表示式

JaveScript 中的正則表示式

語法: 

  var expression = /pattern/flags ;

  pattern: 任何簡單或複雜的正則表示式。

        flags: 可以是 g,i,m 或它們的組合。

      g:表示全域性模式,即模式將被應用於所有字串,而非在發現第一個匹配項時就立即停止。

                      i:表示不區分大小寫。

                      m:表示多行,及在到達一行文字末尾時還會繼續查詢下一行。

例子:

         匹配字串中所有有"at"的例項

          var pattern1=/at/g

模式中的所有元字元都必須轉義。

          元字元: ({\^$|)?*+.]}

例子: 匹配所有“.at”, 不區分大小寫

  var pattern2 = /\.at/gi

RegExp 例項方法:

      exec() : 接受一個引數,即要應用模式的字串,然後返回包含第一個匹配項資訊的陣列,或者沒有匹配項的情況下返回null.返回的陣列雖然是Array 的例項,但包含兩個額外的屬性:index和input。其中index表示匹配項在字串中的位置,而input表示應用正則表示式的字串。

                    在陣列中,第一項是與整個模式匹配的字串。其它項是與模式中的捕獲組匹配的字串。如果沒有捕獲組,陣列只有一項。

       例子:   

              var text =“mom and dad and body"

               var parrern =/mom( and dad( and bady)?)?/gi

              var matches = parrern.exec(text);

               alert(matches.index);  //0

               alert(matches.input);  //“mom and dad and body"

               alert(matches[0]);      //“mom and dad and body"

               alert(matches[1]);      //" and dad and bady"

               alert(match[2]);          //" and bady"

       對於exec()方法而言,即使在模式中設定了全域性標誌(g),它每次也只會返回一個匹配項。在不設定全域性標誌的情況下,在同一字串上呼叫exec()將始終返回第一個匹配項的資訊。而設定全域性標誌情況下,每次呼叫exec()則會在字串中繼續查詢新的匹配項。

       例子:

               var  text ="cat , bat, sat, fat";

               var pattern1 =/.at/;                    //非全域性模式

               var matches = pattern1.exec(text);

               alert(matches.index);        //0

               alert(matches[0]);             //cat

               alert(pattern1.lastIndex);  //0

 

               matches = pattern1.exec(text);

               alert(matches.index);        //0

               alert(matches[0]);             //cat

               alert(pattern1.lastIndex);  //0

 

               var pattern2 =/.at/g;             //全域性模式

               var matches = pattern2.exec(text);

               alert(matches.index);        //0

               alert(matches[0]);             //cat

               alert(pattern2.lastIndex);  //3

 

               matches = pattern2.exec(text);

               alert(matches.index);        //5

               alert(matches[0]);             //bat

               alert(pattern2.lastIndex);  //8

       

       正則表示式的第二個方法是 test(), 它接受一個字串引數,在模式與該引數匹配的情況下返回true;否則返回false. 在只想知道目標字串與模式是否匹配時很方便。

 

RegExp 建構函式屬性

     RegExp 建構函式包含一些屬性,這些屬性適用於作用域中的所有正則表示式,並且基於所執行的最近一次正則表示式操作而變化。   

屬性名 說明
input 最近一次要匹配的字串
lastMatch 最近一次的匹配項
lastParen 最近一次匹配的捕獲組
leftContext input字串中lastMatch之前的文字
multiline

布林值,表示是否所有表示式都是多行模式   

rightContext

input字串中lastMatch之後的文字

 

 

 

 

 

 

      使用這些屬性可以從exec()或test()執行的操作中提取出更具體的資訊.

      例子:

           var text ="this has been a short summer";

           var pattern = /(.)hort/g;

 

             if(pattern.test(text)){

            alert(RegExp.input);                    //this has been a short summer

                 alert(RegExp.leftContext);          //this has been a

                 alert(RegExp.rightContext);        //summer

                 alert(RegExp.lastMatch):            //short

                 alert(RegExp.lastParen):            //s

                 alert(RegExp.multiline):              //false

              }