正則表達式(下)

 本部分主要承接上篇(http://www.cnblogs.com/ttcc/p/3959457.html),繼續總結正則表達式的獲取控制部分。html

獲取控制正則表達式

正則表達式元字符是包含特殊含義的字符。它們有一些特殊功能,能夠控制匹配模式的方式。反斜槓後的元字符將失去其特殊含義。數組

字符類:單個字符和數字this

元字符/元符號google

匹配狀況spa

.htm

      匹配除換行符外的任意字符blog

[a-z0-9]ci

      匹配括號中的字符集中的任意字符字符串

[^a-z0-9]

      匹配任意不在括號中的字符集中的字符

\d

      匹配數字

\D

      匹配非數字,同[^0-9]相同(\d的反義)

\w

      匹配字母和數字及_中任意一個字符

\W

      匹配非字母和數字及_中任意一個字符(\w的反      義)

                                                                                                                 

 

字符類:空白字符

元字符/元符號

匹配狀況

\0

          匹配null字符

\b

          匹配空格字符

\f

          匹配進紙字符

\n

          匹配換行符

\r

          匹配回車字符

\t

          匹配製表符

\s

        匹配空白字符、空格、製表符和換行符

\S

          匹配非空白字符

 

字符類:錨字符

元字符/元符號

匹配狀況

^

  行首匹配(從最開頭開始匹配)

$

  行尾匹配

\A

  只有匹配字符串開始處

\b

  匹配單詞邊界,詞在[]內時無效

\B

  匹配非單詞邊界

\G

  匹配當前搜索的開始位置

\Z

  匹配字符串結束處或行尾

\z

  只匹配字符串結束處

 

字符類:重複字符

元字符/元符號

匹配狀況

x?

匹配0個或1個x

x*

匹配0個或任意多個x

x+

匹配至少一個x

(xyz)+

匹配至少一個(xyz)

x{m,n}

匹配最少m個、最多n個x(注:{m}表示必須m個;{m,}表示m個或m個以上)

 

字符類:替代字符

元字符/元符號

匹配狀況

this|where|logo

匹配this或where或logo中任意一個

 

 

字符類:記錄字符

元字符/元符號

匹配狀況

(string)

用於反向引用的分組

\1或$1

匹配第一個分組中的內容

\2或$2

匹配第二個分組中的內容

\3或$3

匹配第三個分組中的內容

 

/*使用點元字符*/

var pattern = /g..gle/;                                        //.匹配一個任意字符

var str = 'google';

alert(pattern.test(str));

 

/*重複匹配*/

var pattern = /g.*gle/;                                       //.匹配0個一個或多個

var str = 'google';                                              //*,?,+,{n,m}

alert(pattern.test(str));

 

/*使用字符類匹配*/

var pattern = /g[a-zA-Z_]*gle/;                          //[a-z]*表示任意個a-z中的字符

var str = 'google';

alert(pattern.test(str));

 

var pattern = /g[^0-9]*gle/;                               //[^0-9]*表示任意個非0-9的字符

var str = 'google';

alert(pattern.test(str));

 

var pattern = /[a-z][A-Z]+/;                               //[A-Z]+表示A-Z一次或屢次

var str = 'gOOGLE';

alert(pattern.test(str));

 

/*使用元符號匹配*/

var pattern = /g\w*gle/;                                     //\w*匹配任意多個全部字母數字_

var str = 'google';

alert(pattern.test(str));

 

var pattern = /google\d*/;                                  //\d*匹配任意多個數字                     

var str = 'google444';

alert(pattern.test(str));

 

var pattern = /\D{7,}/;                                      //\D{7,}匹配至少7個非數字     

var str = 'google8';

alert(pattern.test(str));

 

/*使用錨元字符匹配*/

var pattern = /^google$/;                    //^從開頭匹配,$從結尾開始匹配,開頭結尾必須都是google

var str = 'google';

alert(pattern.test(str));

 

var pattern = /goo\sgle/;                        //\s能夠匹配到空格            

var str = 'goo gle';

alert(pattern.test(str));                            //true

 

var pattern = /google\b/;                       //\b能夠匹配是否到了邊界               

var str = 'google';

alert(pattern.test(str));

 

/*使用或模式匹配*/

var pattern = /google|baidu|bing/;               //匹配三種其中一種字符串

var str = 'google';

alert(pattern.test(str));                           //true

 

/*使用分組模式匹配*/

var pattern = /(google){4,8}/;                 //匹配分組裏的字符串4-8次(分組至關於一個字符)

var str = 'googlegoogle';

alert(pattern.test(str));                    //false

 

var pattern = /8(.*)8/;                        //獲取8..8之間的任意字符

var str = 'This is 8google8';

str.match(pattern);                                           

alert(RegExp.$1);               //獲得第一個分組裏的字符串內容(前提是運行一下),這兒是:google

 

var pattern = /8(.*)8/;   

var str = 'This is 8google8';

var result = str.replace(pattern,'<strong>$1</strong>');              //獲得替換的字符串輸出

document.write(result);                                    

 

var pattern = /(.*)\s(.*)/;

var str = 'google baidu';

var result = str.replace(pattern, '$2 $1');                             //將兩個分組的值替換輸出

document.write(result);                                              //baidu google

 

貪婪問題:

貪  婪

惰  性

+

+?

?

??

*

*?

{n}

{n}?

{n,}

{n,}?

{n,m}

{n,m}?

 

 

/*關於貪婪和惰性*/

var pattern = /[a-z]+?/;                        //?號關閉了貪婪匹配,只替換了第一個,不然用貪婪下面的都會變爲xxx。。。。。

var str = 'abcdefjhijklmnopqrstuvwxyz';

var result = str.replace(pattern, 'xxx');

alert(result);

 

//禁止了貪婪,開啓的全局(下面三段代碼好好理解!)

var pattern = /8(.*)8/;                                                                            //使用了貪婪

var str = '8google8 8google8 8google8';                   //匹配到了google8 8google8 8google

document.write(str.replace(pattern, '<strong>$1</strong>'));    //結果:<strong>google8 8google8 8google</strong>

 

var pattern = /8(.*?)8/g;                                                          //使用了惰性,開啓全局

var str = '8google8 8google8 8google8';      

document.write(str.replace(pattern, '<strong>$1</strong>'));

//此次結果正確了

//<strong>google</strong>

//<strong>google</strong>

//<strong>google</strong>

 

var pattern = /8([^8]*)8/g;                                              //另外一種禁止貪婪(屏蔽掉8)

var str = 'This is 8google8, That is 8google8, There is 8google8';

var result = str.replace(pattern,'<strong>$1</strong>');

document.write(result); 

 

/*使用exec返回數組*/

var pattern = /^[a-z]+\s[0-9]{4}$/i;

var str = 'google 2012';

alert(pattern.exec(str));                                                  //返回整個字符串

 

var pattern = /^[a-z]+/i;                                                //只匹配字母

var str = 'google 2012';

alert(pattern.exec(str));                                                 //返回google

 

var pattern = /^([a-z]+)\s([0-9]{4})$/;                      //使用了分組

var str = 'google 2012';

var a = pattern.exec(str);      

//alert(a.length);           //3

//alert(a[0]);                                         //a[0],返回匹配到的整個字符串google 2012

//alert(a[1]);                                         //a[1],返回匹配到的第一個分組的字符串google

//alert(a[2]);                                         //a[2],返回匹配到的第二個分組的字符串2012

 

var pattern = /(\d+)([a-z])/;             //這個叫作捕獲性分組,全部的分組都捕獲返回

var str = '123abc';

var a = pattern.exec(str);

//a[0]返回123a

//a[1]返回123

//a[2]返回a

 

var pattern = /(\d+)(?:[a-z])/;        //非捕獲性分組,只要在不須要捕獲返回的分組加上?:

var str = '123abc';

alert(pattern.exec(str));

 

/*使用分組嵌套*/

var pattern = /(a?(b?(c?)))/;          //嵌套分組,從外往內獲取

var str = 'abc';

alert(pattern.exec(str));

//第一步:a[0],整個匹配到的字符串abc

//第二步:a[1],匹配第一個分組(a?(b?(c?))),  abc

//第三步:a[2],匹配第二個分組(b?(c?), bc

//第三步:a[3],匹配第三個分組(c?), c

 

/*使用前瞻捕獲*/

var pattern = /(goo(?=gle))/;                              //goo後面必須跟着gle才能捕獲goo

var str = 'google';

alert(pattern.exec(str));                          //注意這兒返回的是goo

 

/*使用特殊字符匹配*/

var pattern = /\.\[\/b\]/;                                      //特殊字符,用\符號轉義便可

var str = '.[/b]';

alert(pattern.test(str));

 

/*使用換行模式*/

var pattern = /^\d+/mg;                                     //啓用了換行模式

var str = '1.baidu\n2.google\n3.bing';

var result = str.replace(pattern, '#');

alert(result);

 

For my lover, CC !

Thank you, Mr Lee !

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息