關於正則的 符號,獲取控制 都代表什麼意思?

Lurkers.發表於2018-06-22

正規表示式元字元是包含特殊含義的字元。它們有一些特殊功能,可以控制匹配模式的方式。反斜槓後的元字元將失去其特殊含義。

字元類:單個字元和數字

元字元/元符號

匹配情況

.

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

[a-z0-9]

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

[^a-z0-9]

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

\d

匹配數字

\D

匹配非數字,同[^0-9]相同

\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

 

字元類:替代字元

元字元/元符號

匹配情況

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$/;                                   //^從開頭匹配,$從結尾開始匹配

var str = 'google';

alert(pattern.test(str));

 

       var pattern =/goo\sgle/;                                     //\s可以匹配到空格            

       var str = 'google';

       alert(pattern.test(str));

 

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

       var str ='google';

       alert(pattern.test(str));

 

/*使用或模式匹配*/

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

var str = 'google';

alert(pattern.test(str));

 

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

var pattern = /(google){4,8}/;                             //匹配分組裡的字串4-8            

var str = 'googlegoogle';

alert(pattern.test(str));

 

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

var str = 'This is 8google8';

str.match(pattern);                                           

alert(RegExp.$1);                                             //得到第一個分組裡的字串內容

 

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);                             

 

貪  婪

惰  性

+

+?

?

??

*

*?

{n}

{n}?

{n,}

{n,}?

{n,m}

{n,m}?

 

 

/*關於貪婪和惰性*/

var pattern = /[a-z]+?/;                                      //?號關閉了貪婪匹配,只替換了第一個

var str = 'abcdefjhijklmnopqrstuvwxyz';

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

alert(result);

 

var pattern = /8(.+?)8/g;                                    //禁止了貪婪,開啟的全域性

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

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

document.write(result); 

 

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

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})$/i;                //使用分組

var str = 'google 2012';

alert(pattern.exec(str)[0]);                                 //google 2012

alert(pattern.exec(str)[1]);                                 //google

alert(pattern.exec(str)[2]);                                 //2012

 

/*捕獲性分組和非捕獲性分組*/

var pattern = /(\d+)([a-z])/;                                //捕獲性分組

var str = '123abc';

alert(pattern.exec(str));

 

var pattern = /(\d+)(?:[a-z])/;                             //非捕獲性分組

var str = '123abc';

alert(pattern.exec(str));

 

/*使用分組巢狀*/

var pattern = /(A?(B?(C?)))/;                             //從外往內獲取

var str = 'ABC';

alert(pattern.exec(str));

 

/*使用前瞻捕獲*/

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

var str = 'google';

alert(pattern.exec(str));

 

 

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

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);


相關文章