1. 程式人生 > >Javascript 正則表示式 RegExp

Javascript 正則表示式 RegExp

其實正則表示式核心部分就是:有窮自動機(DFA或NFA,學過編譯原理的應該比較清楚。 正則表示式:reg     字串:str reg.exec(str); 等同 str.match(reg);,且返回一個數組。 下面是檢視一些資料總結(有刪減),也用來提示自己: *表示0次或者多次,等同於{0,}  +表示一次或者多次,等同於{1,}  ?表示0次或者1次,等同於{0,1}  1、貪心模式 只要在合法的情況下,它們會盡量多去匹配字元。 例:reg = /c{3,4}/;     str='ccccTest';     str.match(reg);//"cccc"     能匹配四個的時候,正則絕對不會去匹配三個。 2、非貪心模式 如果我們希望正則儘量少地匹配字元,可以在表示數字的符號後面加上一個?。 組成如下的形式: {n,}?, *?, +?, ??, {m,n}? 注意:貪心、非貪心模式,是在模式匹配之後再做判斷的(我的理解)。 3、/^開頭,結尾$/ 4、點‘.’ ‘.’會匹配字串中除了換行符\n之外的所有字元 5、正則表示式中的或,“|“ 例:reg = /^b|c.+/;     str='bbs.blueidea.com';   //匹配開頭的b或者是c.+ 6、括號 正則表示式內括號裡寫的內容會被認為是子正則表示式,所匹配的結果也會被記錄下來供後面使用。 例:reg = /^(b|c).+(c|b)/;     str='bssssssscddddd';     str.match(reg);//return  ["bsssssssc", "b", "c"]
不記錄子正則表示式的匹配結果 使用形如(?:pattern)的正則就可以避免儲存括號內的匹配結果。 例:reg = /^(?:b|c).+/;     str='bbs.blueidea.com';     str.match(reg);//return  ["bbs.blueidea.com"] 正向預查 (1)形式:(?=pattern) 要匹配的字串,後面必須緊跟著pattern! 例:reg = /cainiao(?=8)/;     str='cainiao8';     str.match(reg);//return  ["cainiao"]  需要注意的是,括號裡的內容並不參與真正的匹配,只是檢查一下後面的字元是否符合要求而已,例如上面的正則,返回的是cainiao,而不是cainiao8。 (2)形式(?!pattern)和?=恰好相反,要求字串的後面不能緊跟著某個pattern 7、字元集合[abc]    [abc]表示a或者b或者c中的任意一個字元。    [a-z],[A-Z],[0-9],分別表示小寫字母,大寫字母,數字。 例:reg =  /^[a-zA-Z][a-zA-Z0-9_]+/; 8、反字元集合[^abc] ^在正則表示式開始部分的時候表示開頭的意思,例如/^c/表示開頭是c;  但是在字符集和中,它表示的是類似“非“的意思 9、邊界與非邊界 \b表示的邊界的意思,也就是說,只有字串的開頭和結尾才算數。例如/\bc/就表示字串開始的c或者是結尾的c。 與\b對應\B表示非邊界。 10、數字與非數字 \d表示數字的意思,相反,\D表示非數字 11、空白 直接量字元: \f匹配換頁符 \n匹配換行符 \r匹配回車 \t匹配製表符(Tab鍵) \v匹配垂直製表符。 注意:以上5種字元只需要在字串中使用一個斜杆,例:str="test\nbbs"; \s匹配單個空格,等同於[\f\n\r\t\v]。 12、單詞字元 \w表示單詞字元,等同於字元集合[a-zA-Z0-9_]  \W表示非單詞字元,等效於[^a-zA-Z0-9_] //不要看少了下劃線
13、反向引用 這個挺好用 形式如下:/(子正則表示式)\1/ 例1:reg = /(\w)\1/;     str='blueidea';     str.match(reg); //return null。     這裡的“\1”就叫做反向引用,它表示的是第一個括號內的字正則表示式匹配的內容。在上面的例子中,第一個括號裡的(\w)匹配了b,因此“\1”就同樣表示b了,在餘下的字串裡自然找不到b了。 例2:reg = /(\w)(\w)\2\1/;      str='woow';      str.match(reg); //return ["woow"] 14、匹配元字元 則表示式中都有一定的特殊含義,類似這些有特殊功能的字元都叫做元字元。 例:reg = /c\*/;     str='c*';     str.match(reg); //return ["c*"] 15、正則表示式的修飾符 (1)全域性匹配,修飾符g(匹配所有的子模式)           如果正則表示式沒有設定g,那麼exec方法不會對正則表示式有任何的影響,如果設定了g,那麼exec執行之後會更新正則表示式的lastIndex屬性,表示本次匹配後,所匹配字串的下一個字元的索引,下一次再用這個正則表示式匹配字串的時候就會從上次的lastIndex屬性開始匹配。 例:var reg = /b/g;     var str ='bs.ssblueidea.com';     var c = reg.exec(str);  //c.index=0;     var d = reg.exec(str);  //d.index=5; (2)不區分大小寫,修飾符i 形式:/pattern/i (3)行首行尾,修飾符m 形式:/pattern/m m修飾符的作用是修改^和$在正則表示式中的作用,讓它們分別表示行首和行尾。 例:var reg = /^b/m;     var str = 'test\nbbs'; 匹配到b,因為加了m修飾符之後,^已經表示行首,由於bbs在字串第二行的行首,所以可以成功地匹配。 對於正則表示式,有很多應用 例:    替換字串str中a或A為B    var str ="luafengAaA";    var result = str.replace(/a/gi,"B");    alert(result);//"luBfengBaB" RegExp方法
    test:僅僅檢查是否能夠匹配str,並且返回布林值以表示是否成功。      exec:檢查是否能夠匹配str,並且返回匹配值。     String方法     match:與正則表示式的exec方法類似,該方法同樣返回一個類似陣列的物件。     replace:形式:str. replace (reg,’new str’);     它的作用是將str字串中匹配reg的部分用’’new str”部分程式碼,值得注意的是原字串並不會被修改,而是作為返回值被返回。     例 :var reg =  /(\w+)\s(\w+)/;          var str = 'one two';          var newStr =  str.replace(reg,'$2 $1');          //結果為:two one,也就是空格前後的單詞被調換順序了。     注意:由於在替換文本里$有了特殊的含義,所以我們如果想要是用$這個字元的話,需要寫成$$。     search:返回正則表示式第一次匹配的位置     split:分割返回陣列