javascript正規表達式詳解
在基礎篇中我們已經講解了如何來使用正規表達式等一些基礎知識,這裡我們要講解的是正規表達式中的模式比對,它們能幫助我們更好更快的寫出漂亮的正規表達式,當然它們也是基礎的知識,更高端正規表達式的需要自己在深入的研究!下面對模式的分類是我自己為其命的名,目的隻是能更快更準的記住這些模式。
快捷比對元字元:
. 點元素:表示比對一個且必須一個任意字元;(換行符\n除外)
\s 表示比對一個空格字元
\S 非\s
\d 表示比對0-9中的任意一個數字
\D 非\d
\w 表示比對一個數字或者字元或則下劃線
\W 非\w
\b 邊界比對
\B 非\b
這些是最基礎最常用的一些快捷的比對方式
重複(區間)比對元字元:
x* 表示比對0個或者一個或者多個x
x+ 表示比對1個或者多個x
x? 表示比對0個或者1個x
x{m,n} 表示比對至少m個最多n個x,其中包括了m和n
x{m} 表示精确的比對m個x
x{m,} 表示比對m個或者多于m個x
我想大家看到這裡已經覺得自己能寫出漂亮的正規表達式了,我們來試一試
var regExp = /\d*/;表示比對0個或者一個或者多個數字
var regExp = /.+/;表示比對任意字元一次或者多次;是的你已經能寫出一些漂亮的正規表達式了,我們還要更上一層樓,繼續往下學習;
集合比對:
[a-z] 表示比對小寫字元a到z,其中包括了a和z
[a-z0-9] 表示比對a-z和0-9;這種形式的為集合的複合式的寫法
[^a-z] 表示非a-z中的任意一個字元
分組比對:
(google) 将Google看為一組也就是一個整體;
分組中有一個很有意思的功能,它比對到的第一組結果儲存在RegExp.$1中依次類推RegExp.$2....;
例子:
var regExp = /8(google)+8/;
var str = "8googlegoogle8";
var arr = regExp.exec(str);
alert(RegExp.$1); 此處将會彈出google;
邏輯比對:
| 表示或比對;如:var regExp = /a|b/;表示比對a或者b;
限定比對:
^ 行首比對,該符号必須寫在第一個/的後面;
$ 行尾比對,該字元必須寫在最後一個/的前面;
例子:
var regExp = /\d?google/; 表示在google的前面必須要有0個或者1個數字
var str = "6666google";
var bool = regExp.test(str); 大家很可能會認為這個會傳回false,因為Google的前面已經超過了一個數字,但是它會傳回true,因為它可以從最後一個6開始比對,如果var regExp = /^\dgoogle/;這樣寫,那麼上面的例子則會傳回false,因為它限定了從行首開始比對;行尾比對和上面的例子類似,就不在費筆墨了。
有了上面的快捷比對,重複比對,集合比對,分組比對,邏輯比對,限定比對我想絕大部分的運用正規表達式的知識你都能搞定了,然後加上項目的真正的練習我相信我們能更好!
項目經驗:
在用exec時我相信大家都很容易犯一個書寫的錯誤,因為我在項目中有過經驗教訓,這裡分享給大家;
function regExec(str){
var regExp = /8google*8/ig;
var arr = regExp.exec(str);
if(arr.length > 0){....} //如果比對到的結果集數組長度大于0然後執行代碼
};
這種寫法的緻命之處在于當沒有比對到時,arr為null,null沒有length屬性,是以在if中運用null.length将報錯;
正确的寫法是:
if(arr){.....};如果不是null,任何對象将轉換為true,而是null時則會轉換為false;