好好學一遍JavaScript 筆記(五)

上一篇:/kf/201112/115493.html

javaScript正則——RegExp:
RegExp有個test()方法、如果給定字符串(隻有一個參數)匹配這個模式、它就返回true、否則返回false。
正則表達式中/i,/g,/ig,/gi,/m的區別和含義
/i (忽略大小寫)
/g (全文查找出現的所有匹配字符)
/m (多行查找)
/gi(全文查找、忽略大小寫)
/ig(全文查找、忽略大小寫)

var str = "jfkd@s,laj@fd,safd@saf,ds@";        
var res = /@/gi;  //全文查找@    
alert(res.test(str));   //輸出:true  
exec()方法、有一個字符串參數、返回一個數組。數組的第一個條目是第一個匹配、其它的是反向引用。

//aStr隻包含第一個實例、就是"jfkd@sla"中的@  
var aStr = res.exec(str);  
alert(aStr);  
String對象有個match()方法、它會返回一個包含在字符串中的所有匹配的數組

alert(str.match(res)); //輸出:@,@,@,@  
另一個叫做seartch()的字符串方法的行為與indexOf()有些類似、但是它使用一個RegExp對象而非僅僅一個子字符串。Search()方法返回在字符串中出現的一個匹配的位置。

//它從字符的索引[0]的位置開始查找  
alert(str.search(res));  //輸出:4  
replace():

/** 
  * replace()、它可以用另一個字符串(第二個參數)來替換某個子串(第一個參數)的所有匹配 
  */  
 var sRep = str.replace("@","瘦馬");    
 alert(sRep);  //輸出:jfkd瘦馬s,laj@fd,safd@saf,ds@        
   
 /** 
  * 也可以將正則表達式當作第一個參數 
  */  
 alert(str.replace(res,"瘦馬"));  //輸出:jfkd瘦馬s,laj瘦馬fd,safd瘦馬saf,ds瘦馬       
   
   
 /** 
  * 也可以指定一個函數作為replace的第二個參數 
  */  
 var sFun = str.replace(res,function(){  
     return "瘦馬";      
 });  
 alert("—————"+sFun); //輸出:jfkd瘦馬s,laj瘦馬fd,safd瘦馬saf,ds瘦馬         <span><span class="comment"></span></span> 

/** 
  * split() 
  */      
 alert(str.split("@"));    
 //使用正則表達式、也可以實現相同功能  
 alert(str.split(/@/));  

<!– 一個replace方法處理的隻能輸入數字的示例 –>  
   <input size="25" value="" id="maxnum" name="tbmeetroom.maxnum" _cke_saved_name="tbmeetroom.maxnum"  
                   onkeyup="this.value=this.value.replace(/\D/g,'')"     
                    onafterpaste="this.value=this.value.replace(/\D/g,'')" />   
表達式中所有元字符必須進行轉義(在前面加上反斜杠)才能正確匹配。元字符是正則表達式語法的一部分、下面是正則表達式用到的所有元字符:( [ { \ ^ $ | ) ? * + .因此想要匹配一個問號、則:var reTest = /\?/;或者這樣表示:var reTest = new RegExp("\\?");第二行使用兩個反斜杠、稱之為雙重轉義。
字符類:

<script type="text/javascript">  
        //簡單類——匹配"bat"、"cat"和"fat"   
        var sToMatch = "a bat, a Cat, a fAt baT, a faT cat";  
        var reBatCatRat = /[bcf]at/gi;   
        var arrMatches = sToMatch.match(reBatCatRat);  
        //alert(arrMatches);    
          
        /** 
         * 負向類——他可以指定要排除的字符。 
         * 例如、要匹配除瞭a和b的所有字符、那麼這個字符類就是[^ab]。 
         * 脫字符號(^)告訴正則表達式字符不能匹配後面跟著的字符。 
         * 前面的例子、如果隻想獲取包含at但不能以b或c開頭單詞: 
         */  
        reBatCatRat = /[^bc]at/gi;  
        arrMatches = sToMatch.match(reBatCatRat);  
        //alert(arrMatches);     
          
        /** 
         * 范圍類——要匹配所有的字母表中的字符、但是又實在不想逐個輸入、    
         * 可以使用:[a-z]。裡面的橫線(-)、它的意思是"從什麼到什麼"(a到z)   
         * 這裡a-z僅僅匹配瞭小寫字母、除非使用i選項來指明不區分大小寫 
         * 如果要僅僅匹配大寫字母則使用:[A-Z] 
         * 取得以1、2、3、4結尾、number開頭的字符 
         */  
        sToMatch = "number1,number2,number3,number4,number5,number6,number7,number8,number9";    
        reBatCatRat = /number[1-4]/gi;   //或者使用負向類 /number[^5-9]/gi      
        arrMatches = sToMatch.match(reBatCatRat);    
        //alert(arrMatches);      
          
        /** 
         * 組合類——由其他的類組合而成的字符類。 
         * 假設要匹配所有從a~m的字母以及從1-4的數字、以及一個換行符 
         * [a-m1-4\n]  
         * javaScript/ECMAScript不支持某些其他正則表達式實現中的聯合類和交叉類。這意味著你不能有類似 
         * [a-m[p-z]]或者[a-m[^b-e]]這類的模式出現  
         */  
           
           
        /** 
         * 預定義類 
            代碼         等同於                      匹配 
            .           [^\n\r]                 除瞭換行和回車之外的任意字符 
            \d          [0-9]                   數字 
            \D          [^0-9]                  非數字字符 
            \s          [ \t\n\x0B\f\r]         空白字符 
            \S          [^ \t\n\x0B\f\r]        非空白字符 
            \w          [a-zA-Z_0-9]            單詞字符(所有的字母、所有的數字和下劃線) 
            \W          [^a-zA-Z_0-9]           非單詞字符 
             
            想匹配三個數字 
         */  
        sToMatch = "325 fds2";    
        reBatCatRat = /\d\d\d/;   //或者使用負向類 /number[^5-9]/gi      
        alert(reBatCatRat.test(sToMatch));  
    </script>    

摘自 旦旦而學的專欄

發佈留言