人人人妻人人人妻人人人,99精品国产综合久久久久五月天 ,欧美白人最猛性XXXXX,日韩AV无码免费播放

News新聞

業(yè)界新聞動態(tài)、技術(shù)前沿
Who are we?

您的位置:首頁      JS/JQ/AJAX      javascript正則表達式詳解

javascript正則表達式詳解

標簽: 發(fā)布日期:2014-02-20 00:00:00 1125

在基礎(chǔ)篇中我們已經(jīng)講解了如何來使用正則表達式等一些基礎(chǔ)知識,這里我們要講解的是正則表達式中的模式匹配,它們能幫助我們更好更快的寫出漂亮的正則表達式,當然它們也是基礎(chǔ)的知識,更高端正則表達式的需要自己在深入的研究!下面對模式的分類是我自己為其命的名,目的只是能更快更準的記住這些模式。

快捷匹配元字符:

.  點元素:表示匹配一個且必須一個任意字符;(換行符\n除外)

\s 表示匹配一個空格字符

\S 非\s

\d 表示匹配0-9中的任意一個數(shù)字

\D 非\d

\w 表示匹配一個數(shù)字或者字符或則下劃線

\W 非\w

\b 邊界匹配

\B 非\b

這些是最基礎(chǔ)最常用的一些快捷的匹配方式

重復(區(qū)間)匹配元字符:

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

我想大家看到這里已經(jīng)覺得自己能寫出漂亮的正則表達式了,我們來試一試

var regExp = /\d*/;表示匹配0個或者一個或者多個數(shù)字

var regExp = /.+/;表示匹配任意字符一次或者多次;是的你已經(jīng)能寫出一些漂亮的正則表達式了,我們還要更上一層樓,繼續(xù)往下學習;

集合匹配:

[a-z] 表示匹配小寫字符a到z,其中包括了a和z

[a-z0-9] 表示匹配a-z和0-9;這種形式的為集合的復合式的寫法

[^a-z] 表示非a-z中的任意一個字符

分組匹配:

(google) 將Google看為一組也就是一個整體;

分組中有一個很有意思的功能,它匹配到的第一組結(jié)果保存在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個數(shù)字

var str = "6666google";

var bool = regExp.test(str); 大家很可能會認為這個會返回false,因為Google的前面已經(jīng)超過了一個數(shù)字,但是它會返回true,因為它可以從最后一個6開始匹配,如果var regExp = /^\dgoogle/;這樣寫,那么上面的例子則會返回false,因為它限定了從行首開始匹配;行尾匹配和上面的例子類似,就不在費筆墨了。


有了上面的快捷匹配,重復匹配,集合匹配,分組匹配,邏輯匹配,限定匹配我想絕大部分的運用正則表達式的知識你都能搞定了,然后加上項目的真正的練習我相信我們能更好!

項目經(jīng)驗:

在用exec時我相信大家都很容易犯一個書寫的錯誤,因為我在項目中有過經(jīng)驗教訓,這里分享給大家;

function regExec(str){

   var regExp = /8google*8/ig;

   var arr = regExp.exec(str);

   if(arr.length > 0){....} //如果匹配到的結(jié)果集數(shù)組長度大于0然后執(zhí)行代碼

};

這種寫法的致命之處在于當沒有匹配到時,arr為null,null沒有l(wèi)ength屬性,所以在if中運用null.length將報錯;

正確的寫法是:

if(arr){.....};如果不是null,任何對象將轉(zhuǎn)換為true,而是null時則會轉(zhuǎn)換為false;