上一篇:http://www.bkjia.com/kf/201112/115493.html
javaScript正則——RegExp:
RegExp有個test()方法、如果給定字串(只有一個參數)匹配這個模式、它就返回true、否則返回false。
Regex中/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@
/**
* 也可以將Regex當作第一個參數
*/
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("@"));
//使用Regex、也可以實現相同功能
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,'')" />
運算式中所有元字元必須進行轉義(在前面加上反斜線)才能正確匹配。元字元是Regex文法的一部分、下面是Regex用到的所有元字元:( [ { \ ^ $ | ) ? * + .因此想要匹配一個問號、則: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]。
* 脫字元號(^)告訴Regex字元不能匹配後面跟著的字元。
* 前面的例子、如果只想擷取包含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不支援某些其他Regex實現中的聯合類和交叉類。這意味著你不能有類似
* [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>
摘自 旦旦而學的專欄