JavaScript正則表達式

1、JS正則表達式簡介正則表達式

      一、正則表達式: Regular Expression 使用單個字符串來描述、匹配一系列符合某個句法規則的字符串。數組

      二、正則表達式在線工具: regexper.com函數

           本地安裝工具

      三、例子用符: \b is \b     ----------- 單詞 is ,\b是 word boundary,單詞邊界測試

                          . --------- 任意字符;      \. -------- .  ;     \ / --------- / ; ( **** ) ---------- 分組;spa

                          \d --------- 數字 ;    \d{4} ----------- 4個數字 ;  [/-] -------- []是或者, / 或者-;prototype

                          ^-----------開頭 ;  $ ---------- 結尾;regexp

                         $1 ---------    ;       $2-----------  ;     $3------------ 對象

2、認識正則表達式ip

     一、RegExp對象

         JS經過內置對象RegExp支持正則表達式;

         兩種方法實例化RegExp對象: 字面量 和  構造函數

                字面量: var reg = / \bis\b/g;

                構造函數:var reg = new RegExp('\\bis\\b','g');

         例子用符: / *** /g ----------- g是全局搜索,不加就匹配第一個

                                   i ----------- ignore case ,忽略大小寫,默認大小寫敏感

                                   m --------- multiple lines 多行搜索

      二、元字符

          正則表達式由兩種基本字符類型字符:

                   原以文本字符

                   元字符 ---------------- 在正則表示式中有特殊含義的非文本字符

                            . * + ? $ ^ | \  () {} []

                    \t------ 水平製表符      \n --------- 換行   \r ---------- 回車

      三、字符類

           通常狀況下正則表達式一個字符對應字符串一個字符。

          咱們可使用元字符 [] 來構建一個簡單的類;所謂類是指符合某些特性的對象,一個泛指,而不是特指某個字符;如 表達式 [abc] 把字符 a 或 b 或 c歸爲一類,表達式能夠匹配這類的字符。

           字符類取反 : 使用元字符^建立 反響類/負向類。 [^abc]

      四、範圍類

           正則表達式還提供了範圍類;因此咱們可使用 [a-z]來鏈接兩個字符表示 從a到z的任意字符,這是閉區間,包含a和z自己。

            在 [] 組成的類內部是能夠連寫的 [a-zA-Z0-9];

             - 的匹配正經常使用:[0-9-] -------- 匹配0~9或-;

       五、JS預約義類及邊界

           預約義類:  . ----------------- 除回車和換行以外的全部字符

                            \d  ------- [0-9] ----------- 數字字符

                           \D ---------- [^0-9] ----------- 非數字字符

                           \s --------- [\t\n\r\f] ----------- 空白符

                          \S ----------- [^\t\n\r\f] ---------- 非空白符

                          \w ----------[a-zA-Z_0-9] ---------- 單詞字符(數字、字母或下劃線)

                           \W -------- [^a-zA-Z_0-9] ---------- 非單詞字符

           邊界匹配字符:

                   ^ ------------- 以 xxx 開始

                   $ ------------ 以 xxx 結束

                   \b ----------- 單詞邊界

                   \B -----------  非單詞邊界,如 'This is a boy'.replace(/\Bis\b/g,0);

       六、量詞

                  ? -------- 出現0次或一次( 最多1次)

                  + --------  出現1次或屢次 (最少1次)

                  * --------- 出現任意次

                  {n} --------  出現n次

                  {n,m} --------- 出現 n到m次

                   {n,} -------- 至少出現n次

                   {0,n} --------  最多n次

 

       七、貪婪模式與非貪婪模式

            貪婪模式:  \d{n,m} --------------- 儘量多的匹配,m次

            非貪婪模式:  \d{n,m} ------------- 能匹配到n次就能夠了,在量詞後面加?

                             如: ‘123456789’.match(/\d{3,5}?/g)

       八、分組

                 Bayron{3} = Bayro + 'n{3}'  -------------- 是匹配的最後一個字母,不是單詞,匹配單詞須要分組

                 使用()進行分組 : (Bayron){3}   

                  或 :使用 | 達到或的效果 ---------         abc(d|e)123 : 匹配 abcd123 或abce123

                  反響引用:$1$2$3 ---------- 捕獲分組,對單個無效

                                如 2015-12-26  改成 12/26/2015 : ‘2015-12-26’.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1');  

                  忽略分組: 不但願捕獲某些分組,只須要在分組內加上?:就能夠了:

                                   (?:Bayron).(ok)

          九、前瞻

              正則表達式從文本頭部向尾部開始解析,文本尾部方向,稱爲「前」。

              前瞻就是在正則表達式匹配到規則的時候,向前檢查是否符合斷言[便是否符合附加條件];

                             後顧/後瞻方向相反,Javascript不支持後顧

             符合和不符合特定斷言稱爲 確定/正向 匹配 和 否認/負向 匹配

             正向前瞻 -------- exp(?=assert)

             負向前瞻 -------- exp(?!assert)

             例子: ‘a2*3’.replace(/\w(?=\d)/g,'X'); ----- 'X2*3'  意思是匹配的字符後面要是數字就替換

          十、JS對象屬性

               global: 全文搜索,默認false

               ignore case: 是否忽略大小寫敏感,默認false

               multiline: 多行搜索,默認false

               lastIndex: 是當前表達式匹配內容的最後一個字符的下一個位置

               source:正則表達式的文本字符串

           十一、test和exec方法

                 RegExp.prototype.test(str): 用於測試字符串參數中是否存在匹配正則表達式模式的字符串,返回 true 或 false。

                注: test()的結果受lastIndex的影響,爲false的重置。

                RegExp.prototype.exec(str):使用正則表達式模式對字符串執行搜索,並將更新全局RegExp對象的屬性以反映匹配結果。返回 null 或 數組。數組屬性:

               ------- index 聲明匹配文本的第一個字符的位置

               ------  input 存放被檢索的字符串 string

 

          十二、字符串對象方法

               String.prototype.search(reg)

              search():用於檢測字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串。

               方法返回第一個匹配結果index,查找不到返回-1。

               search()方法不執行全局匹配,它將忽略標誌 g ,而且老是從字符串的開始進行搜索。

        

              String.prototype.match(reg)

              match()方法將檢索字符串,以找到一個或多個與regexp匹配的文本;返回 null 或 數組。

              regexp是否具備標誌 g 對結果影響很大,沒有就執行一次。

             數組屬性仍是  index 和 input[存放正則表達式]

 

             String.prototype.split(reg)

             經常使用split()把字符串分割成字符數組,如: ‘a1f2g4g6’.split(/\d/g) ---- ['a','f','g','g']  以數字分割。

             String.prototype.replace(str,replaceStr)  ----------  第一個str但是 /正則表達式/g

             String.prototype.replace(str,function)   ,function參數的含義:

                  function會在每次匹配替換的時候調用,有四個參數:

                    一、匹配字符串

                    二、正則表達式分組內容,沒有分組則沒有該參數

                    三、匹配項在字符串中的index

                    四、原字符串

           例子: 字符串中數字+1

               ‘a1g2f3h4’.replace(/\d/g,function(match,index,origin){

                     return parseInt(match)+1;

              });

相關文章
相關標籤/搜索