javaScript正則——RegExp:javascript
RegExp有個test()方法、若是給定字符串(只有一個參數)匹配這個模式、它就返回true、不然返回false。
正則表達式中/i,/g,/ig,/gi,/m的區別和含義
/i (忽略大小寫)
/g (全文查找出現的全部匹配字符)
/m (多行查找)
/gi(全文查找、忽略大小寫)
/ig(全文查找、忽略大小寫)java
- 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()方法返回在字符串中出現的一個匹配的位置。ide
- //它從字符的索引[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瘦馬
- /**
- * split()
- */
- alert(str.split("@"));
- //使用正則表達式、也能夠實現相同功能
- alert(str.split(/@/));
- <!-- 一個replace方法處理的只能輸入數字的示例 -->
- <input size="25" value="" id="maxnum" 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("\\?");第二行使用兩個反斜槓、稱之爲雙重轉義。this
字符類:spa
- <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]
- * 取得以一、二、三、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>