一:關於regexp的定義
js對正規表示式的支援是通過regexp類實現的,定義乙個正則有兩種方式:用regexp物件的建構函式,字面量的方式。
1:regexp函式有乙個或兩個引數,前者為匹配的模式字串,後者為指定額外的處理指令。如:var recat = new regexp("cat","gi");
2:字面量表示方式,如:var recat = /cat/gi;
《注意:兩種定義方式在使用元字元和特殊字元時,前者要用兩個斜槓(//)進行雙重轉義,如:var retest = new regexp("//n","gi");後者只用乙個斜槓就ok了》
二:regexp常用的函式
1:test()返回布林值,表示是否有乙個匹配成功;var test = recat.test(「cat」);
2:exec()有乙個字串引數,返回的乙個陣列,第乙個條目為第乙個匹配,其他的為反向引用。
例:var stest1="red"; var stest2="blue"; var reredorblue = /(red|blue)/; reredorblue.test(stest1); alert(reredorblue.exec(stest1));這裡返回的是兩個red,前者表示第乙個匹配,後者表示反向引用。
3:string物件的match(),返回字串中所有匹配的陣列,
例:var stomatch =」a bat,a cat,a fat cat」; var recat = /at/gi; var arrmatches = stomathch(recat);返回有」bat」 ,」cat」,」fat」,」cat」陣列。
4:search();返回的是字串中出現的乙個匹配的位置,同indexof()有些類似,不過它用的是乙個regexp物件。
例:var stomatch =」a bat,a cat,a fat cat」; var recat = /at/gi; stomatch.search(recat); //返回的是出現第乙個匹配時,它在字串的位置,這裡為3,也就是'bat'中的'at'
三:語法結構
js中正規表示式的語法結構
簡單模式:元字元,特殊字元,字元類(簡單類,負向類,範圍類,組合類,預定義類),量詞(簡單量詞,貪婪性量詞,惰性的量詞,支配性的量詞)
複雜模式:分組,反向引用,候選,非捕獲性分組,前瞻,邊界,多行模式。
1,元字元下特殊字元注意前面所提到的在兩種不同的定義方式的轉義形式。
2,簡單類,表示形式 var rematch = /[bc]a/; 說明:在之間的字元,的字元不可以同時出現,只可以出現其中的個就可以。
例: var stomatch = "a bat,cat,bcat,at";
var reat = /[bc]at/gi;
alert(stomatch.match(reat));
說明:這裡返回的有"bat","cat","cat'.因為每一項中都有且只含有[bc]中的一項。
3,負向類, 指定要排除的字元,脫字符號(^)告訴正規表示式字元不能匹配後面跟著的字元。
例:var stomatch ="a bat,cat fat,at";
var reat = /[^bc]at/gi; //表示at前面不含有b或c的所有匹配
stomatch.match(reat); //返回:"fat","at"
4:範圍類,可以指定正則表達中字串的的範圍,不用逐個地輸入,如要表示小寫字母的匹配,可以用[a-z].
5:組合類,由幾種其他的類組合而成的字元類放入到下中,《注意:內部的類之間不要有空格分開,js不支援交叉類》
例:var retest = /[a-g1-5/n]/gi;表示匹配所有從a到g,1到4,以及下個換行符。
6:預定義類:由於一些是常用的模式,所以用一組預定義的字元類來指定複雜類。
/d [0-9] 數字
/d [^0-9] 非數字
/s 空白字元
/s 非空白字元
/w [a-za-z0-9_] 單詞字元(所有的字母,所有的數字,下劃線。
7:量詞:指定某個特定的模式在正規表示式中出現的次數,可以是硬性數量,也可以是軟性數量。
a簡單量詞
? 出現0或1次
× 出現0或無數次
+ 出現1或無數次
出現n次
出現至少n次
出現m到n次
b1.貪婪的量詞:
b2。惰性量詞:
b3.支配量詞:因為該量詞在ie和opera下都不支援,所以就不用多說。
複雜模式
1.分組:通過用一系列的括號包圍一系列字元、字元類以入量詞來使用的。
例:var re1=/(dog)/gi; 表示,()內的'dog'就是乙個分組,他可以看成乙個整體來做處理,這裡表示『dog』在模式中連續出現兩次。《說明:常常和反向引用一現用。>
2.反向引用。含有分組的表示式計算完後,每個分組都被存放在乙個特殊的地方以便將來使用,這些存放在分組中的特殊值,就叫「反向引用」。反向引用是與分組的左括號的順序來進行建立和編號的。
,反向引用的表示有兩種方式:regexp.$1表示呼叫第乙個反向引用,也可以用/1表示。
a反向引用的使用方法
a1,在正則後的test,match或search方法後,反向引用的值就可以用regexp的建構函式來獲得,
a2,可以在定義分組的的表示式中包含反向引用。如var recatcat=/(cat)/1/;表示兩上個'cat';
a3,(常用)在string物件的replace方法中使用,這時它有兩個引數,前乙個為正規表示式,後乙個為反向引用,後者來替換字串的東西。
3,候選.對同乙個表示式匹配多個字元時,可以運用候選,這樣就可減少很多的冗餘處理。表示形式,var reredorblack = /red|black|blue/gi;
說明:該表示式可以指定含有"red","black","blue"其中任何乙個的字串進行匹配。也可以用在分組中運用,如:var reredorbalck = /(red|black)/gi;
例:var stest="red"; reredorblack.exec(stest);這時返回的是'red','red',前乙個為第乙個匹配的字元 ,後者表示返回的反向引用regexp.$1.
《說明:這種形式同replace()一起使用,常常放在論壇中,對論壇內容進行過濾》
4,非捕獲性分組:建立有反向引用的「分組」,叫做「捕獲性分組」;而另外一種不會建立反向引用的「分組」,叫做「非捕獲性分組」。二者的區別:儲存反向引用會降低匹配速度,而後者具有匹配的能力,而不必要儲存結果的開銷。
,表示形式:在左括號後面加上?:就可以了 ,例:var renumbers = /(?:/d+)/;這時用regexp.$1不會得到「反向引用」。
5,前瞻:當某乙個特定的字元出現在另乙個字元之前時,才去捕獲它,這時就可以用」前瞻「來解決。
a正向前瞻: 表示形式:(?=)它用到了括號,但不表示分組,
例:var rebed = /(bed(?=room))/;表示bed,出現在room之前。這時用regexp.$1可以得到"bed",但用regexp.$2卻沒有任何值,因為這時的括號不表示分組。
b負向前瞻:表示乙個特定的字元不可以在另乙個字元之前時,才去捕獲它。、
表示形式:(?!).
例:var rebed = /(bed(?!room))/; 表示在"room",之前不是"bed"時捕獲它。
2009-12-17
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...