好好學一遍JavaScript 筆記(六)

繼續正則表達式——量詞:java

  
  
           
  
  
  1. /** 
  2.          * 量詞能夠指定某個特定模式出現的次數。當指定某個模式應當出現 
  3.          * 的次數時、能夠指定硬性數量(例如、某個字符應該出現三次)、也 
  4.          * 能夠指定軟性數量(例如、這個字符至少應該出現一次、不過能夠 
  5.          * 重複任意次)。 
  6.                 代碼        描述 
  7.                 ?     出現零次或一次 
  8.                 *     出現零次或屢次(任意次) 
  9.                 +     出現一次或屢次(至少出現一次) 
  10.                 {n}   必定出現n次 
  11.                 {n,m}    至少出現n次但不超過m次 
  12.                 {n,}     至少出現n次 
  13.                  
  14.             例如:想匹配bread,read,red這幾個單詞  
  15.          */ 
  16.         var sIf = /b?rea?d/;        
  17.         sIf = /b{0,1}rea{0,1}d/;     //另一種方法  
  18.          
  19.         /** 
  20.          *  
  21.          * 例如匹配 bd,bad,baad,baaad 
  22.          *  
  23.          *             正則表達式           匹配 
  24.                         ba?d            "bd","bad" 
  25.                         ba*d            "bd","bad","baad","baaad" 
  26.                         ba+d            "bad","baad","baaad" 
  27.                         ba{0,1}d        "bd","bad" 
  28.                         ba{0,}d         "bd","bad","baad","baaad" 
  29.                         ba{1,}d         "bad","baad","baaad" 
  30.          */ 
  31.           
  32.         /** 
  33.          * 匹配:bead、baed、beed、baad、bad  
  34.          */ 
  35.         //var eaTest = /b[ea]{1,2}d/ ;  
  36.         var sToMatch = "abbbaabbbaaabbb1234"
  37.         var re1 = /.*bbb/g;   //貪婪 
  38.         var re2 = /.*?bbb/g;   //惰性 
  39.         var re3=/.*+bbb/g;   //支配        
  40.         alert("re1:"+re1.exec(sToMatch)+"    \n--re2:"+re2.exec(sToMatch)); 

貪婪的、惰性的和支配性的量詞
貪婪量詞先看整個字符串是否匹配、若是沒有發現匹配、它就去掉
該字符串中的最後一個字符、並再次嘗試。若是仍是沒有發現匹配
、那麼再次去掉最後一個字符、這個過程會一直重複直到發現一個
匹配或者字符串不剩任何字符。
惰性量詞首先看字符串中的第一個字符是否匹配、若是單獨這一個
字符還不夠、就讀入下一個字符、組成兩個字符的字符串。若是還
是沒有發現匹配、惰性量詞繼續從字符串中添加字符知道發現匹配
或者整個字符串都檢查過也沒有匹配。惰性量詞和貪婪量詞的工做
方式剛好相反。
支配量詞只嘗試匹配整個字符串。若是整個字符串不能產生匹配、
不作進一步嘗試。支配詞其實簡單的說、就是一刀切。
怎樣表示貪婪、惰性和支配量詞呢?正是徹底使用星號、加號和問號。
例如、單獨一個問號(?)是貪婪的、可是問號後面在跟一個問號(??)就
是惰性的。要使問號成爲支配量詞、在後面加上一個加號(?+)。正則表達式


貪婪               惰性            支配                 描述
 ?                  ??             ?+            零次或一次出現
 *                  *?             *+            零次或屢次出現
 +                  +?             ++            一次或屢次出現
{n}                {n}?           {n}+           剛好n次出現
{n,m}              {n,m}?         {n,m}+         至少n次至多m次出現
{n,}               {n,}?          {n,}+          至少n次出現ide

---------------原文出自《javaScript高級程序設計》-----------------------函數

複雜模式——分組:this

  
  
           
  
  
  1. /** 
  2.          * 分組、 
  3.          * 假設想匹配字符串"dogdog"。使用目前得到的知識 
  4.          * 可能估計表達式應該相似: 
  5.          */ 
  6.         var res = /dogdog/g; 
  7.         alert(res.test("dogdog"));   
  8.  
  9.         //分組重寫: 
  10.         var res = /(dog){2}/g; 
  11.         alert(res.test("dogdog"));     
  12.          
  13.         //分組量詞使用 
  14.         var re1 = /(dog)?/;  //出現零次或一次    
  15.         var re2 = /(dog)*/;  //出現零次或屢次(任意次) 
  16.         var re3 = /(dog)+/;  //出現一次或屢次(至少出現一次) 
  17.          
  18.         //同時也能夠將分組放在中間 
  19.         var res = /(mmm( and nnn)?)/;   

trim() 方法:spa

  
  
           
  
  
  1. /** 
  2.          * trim() 方法  
  3.          * "\s" 匹配全部空格 . 
  4.          * "." 小數點能夠匹配除了換行符(\n)之外的任意一個字符. 
  5.          * "^" 與字符串開始的地方匹配,不匹配任何字符. 
  6.          * "$" 與字符串結束的地方匹配,不匹配任何字符. 
  7.          * var reExt = /^\s*(.*?)\s+$/ ;    
  8.          * 這個正則表達式將查找字符串開頭的零個或多個空白、 
  9.          * 跟着是任意數目的字符(在分組中捕獲的字符)、 
  10.          * 最後字符串結尾處又是零個或多個空白。 
  11.          * 經過配合使用String對象的replace()方法以及反向引用、 
  12.          * 就能夠自定義本身的trim()方法: 
  13.          */ 
  14.         String.prototype.trim = function(){   
  15.              var reExt = /^\s*(.*?)\s+$/ ;  
  16.              /* 
  17.               * $1表示的就是左邊表達式中括號內的字符,即第一個子匹配,   
  18.               * 同理可得$2表示第二個子匹配。什麼是子匹配呢?通俗點講, 
  19.               * 就是左邊每個括號是第一個字匹配,第二個括號是第二個子匹配。 
  20.               */  
  21.              return this.replace(reExt,"$1");                
  22.         }; 
  23.         alert("'"+"  fdsa  ".trim()+"'");  

反向引用:prototype

  
  
           
  
  
  1. /** 
  2.          * 反向引用 
  3.          * 每一個分組都被存放在一個特殊的地方以備未來使用。 
  4.          * 這些存儲在分組中的特殊值、咱們稱之爲反向引用。 
  5.          * 首先、使用正則表達式對象的test()、match()、或search()方法後、 
  6.          * 反向引用的值能夠從RegExp構造函數中得到    
  7.          */  
  8.         var reg = /#(\d+)/;    
  9.         alert(reg.test("#123456789"));  
  10.         /* 
  11.          * 輸出的是(\d+)匹配的內容:123456789 
  12.          * 若是有第二個分組()則$2依此類推  
  13.          */ 
  14.         alert("'"+RegExp.$1+"'");     
  15.  
  16.         /** 
  17.          * 反向引用示例:  
  18.          */ 
  19.         var reg = /(\d{3})(\d{3})/; 
  20.         /* 
  21.          * $1等同於:456 
  22.          * $2等同於:123 
  23.          */ 
  24.         alert("456123".replace(reg,"$2$1"));  

候選:設計

  
  
           
  
  
  1. /** 
  2.          * 候選 
  3.          * 一個表達式、即匹配"古道西風"又匹配"旦旦而學" 
  4.          * "|"管道符:左右兩邊表達式之間 "或" 關係  
  5.          */ 
  6.         var reg = /(古道西風|旦旦而學)/;   
  7.         alert(reg.test("旦旦而s")); 

非捕獲性分組:對象

  
  
           
  
  
  1. /** 
  2.          * 非捕獲性分組 
  3.          * 在較長的正則表達式中、存儲反向引用會下降匹配速度。 
  4.          * 經過使用非捕獲性分組、仍然能夠擁有與匹配字符串列一樣的能力、 
  5.          * 而無須要存儲結果的開銷。 
  6.          * 建立一個非捕獲性分組、只要在左括號的後面加上一個問號和一個緊跟的冒號: 
  7.          */ 
  8.         var reg = /#(?:\d+)/;       
  9.         reg.test("#456123");   
  10.         alert(RegExp.$1); 

去掉文本中全部HTML標籤:ip

  
  
           
  
  
  1. String.prototype.stripHTML = function (){   
  2.             var reTag = /<(?:.|\s)*?>/g;    
  3.             return this.replace(reTag,"");   
  4.         }; 
  5.         /* 
  6.          * 若是非要在雙引號字符串使用雙引號則加上\轉義  
  7.          */ 
  8.         alert("<option value=\"1\">1</option>".stripHTML());  

前瞻:

  
  
           
  
  
  1. /** 
  2.          * 前瞻 
  3.          * 它告訴正則表達式運算器向前看一些字符而不移動其位置。 
  4.          * 一樣存在正向前瞻和負向前瞻。 
  5.          * 正向前瞻檢查的是接下來出現的是否是某個特定字符集。 
  6.          * 而負向前瞻則是檢查接下來的不該該出現的特定字符集。 
  7.          * 建立正向前瞻要將模式放在(?=和)之間。 
  8.          */ 
  9.         var testStr = "begRooms"
  10.         var testAry = "begTest"
  11.         var reg = /beg(?=Room)/;    //匹配後面跟着Room的beg       
  12.         alert(reg.test(testStr));//true 
  13.         alert(reg.test(testAry));//false 
  14.          
  15.         /* 
  16.          * 負向前瞻 
  17.          * 要建立它要將模式放在(?!和)之間。   
  18.          */ 
  19.         var reg = /beg(?!Room)/;  //匹配後面不跟着Room的beg        
  20.         alert(reg.test(testStr));  //false 
  21.         alert(reg.test(testAry));  //true 

邊界:

  
  
           
  
  
  1. /** 
  2.          * 邊界 
  3.          * \w: 匹配包括下劃線的任何單詞字符,等價於 [A-Z a-z 0-9_] 
  4.          * \W: 匹配任何非單詞字符,等價於 [^A-Z a-z 0-9_] 
  5.          * \b:單詞邊界 
  6.          * \B:非單詞邊界  
  7.          */ 
  8.         var sT = "my English is very shit.";  
  9.         var reg = /(\w+)\.$/;  
  10.         alert(reg.test(sT));  //true 
  11.         alert(RegExp.$1);  //shit 
  12.          
  13.         var reg = /^(\w+)/;    
  14.         alert(reg.test(sT));  //true   
  15.         alert(RegExp.$1);  //my   
  16.          
  17.         var reg = /^(.+?)\b/; 
  18.         reg.test(sT); 
  19.         alert(RegExp.$1);  //my
相關文章
相關標籤/搜索