javascript之Regex學習筆記

來源:互聯網
上載者:User

標籤:

Regex的聲明

直接寫在/與/之間

var reg = /...../;

 

使用RegExp()建構函式

var reg = new RegExp(......);

 

 

在ECMAscript 3中RegExp對象類似於引用對象,在ECMAscript 5中RegExp對象類似於值對象。

var reg= /a/;var reg2 =/a/;console.log(reg === reg2);//ES3標準返回true,ES5返回false//此時在ES3中reg與reg2指向同一個對象//在ES5中reg與reg2為兩個不同的對象

 

 

逸出字元

Regex所有字元都按直面量進行匹配。加入反斜線(\)可進行轉義。

 

預定義類

 . [^\n\r] 除了換行和斷行符號之外的任一字元

 \d [0-9] 數字字元digit

 \D [^0-9] 非數字字元

 \w [a-zA-Z0-9_] 單詞字元(所有的字母數字和_ ) word

 \W [^a-zA-Z0-9_] 非單詞字元

 \s [\f\r\n\t\v] 不可見字元 space

 \S [^\f\r\n\t\v] 可見字元

 

量詞

"*" 重複零次或更多 x>=0

"+" 重複一次或更多次 x>=1

"?" 重複零次或一次  x=(0||1)

{n} n次 x=n

{n,} 重複n次或更多  x>=n

{n,m} 重複出現的次數比n多但比m少 n<=x<=m

 

非貪婪匹配

當以上字元後再加入一個?時將進行非貪婪匹配如*?,??,+?.{n,m}?。

進行貪婪匹配時將儘可能少的匹配內容

如/a+/匹配aaa時將回匹配全部a即匹配“aaa”,而/a+?/匹配aaa時將匹配一個“a”。

需要注意的是非貪婪匹配從第一個匹配到的值開始。

例如使用/a+?b/匹配aaab時並不會按最少的匹配ab。而是匹配aaab。這是因為匹配是從第一個a開始匹配所以也會把之前的a都匹配到。

 

選擇

“|”分割用於選擇的字元

a|b|c可匹配a或者b或者c

 

分組

“( )”可用於分組調用exec方法返回Array對象,0位置為匹配到的完整內容,之後位置為”( )”所分組的資料。

var str = "abcdefg";var r = /c(d(e))/;console.log(r.exec(str));  //["cde", "de", "e", index: 2, input: "abcdefg"]

 

 

在“(”後跟“?:”表示不擷取

var str = "abcdefg";var r = /c(?:d(e))/;console.log(r.exec(str)); // ["cde", "e", index: 2, input: "abcdefg"]  不擷取de

 

 

元字元[ ]

匹配一個出現在 [] 中的字元。

 

var str1 = "abcde";var str2 = "fghig";var r = /[bg]/;console.log(r.exec(str1)[0]); //bconsole.log(r.exec(str2)[0]); //g

 

 

使用 [] 匹配多個字元:[a-z] [A-Z]

表示否定意思:[^abc]  不匹配^之後的字元

 

元字元^和$

^ 表示必須以某某開頭

$ 表示必須以某某結尾

 

var r1 = /^a/;var r2 = /a$/;str1 = "ab";str2 = "ba";console.log(r1.test(str1));  //trueconsole.log(r1.test(str2));  //falseconsole.log(r2.test(str1));  //falseconsole.log(r2.test(str2));  //true

 

 

當同時出現^和$時表示精確匹配

var r1 = /^asd$/;str1 = "asd";str2 = "a-s-d";console.log(r1.test(str1));  //trueconsole.log(r1.test(str2));  //false

 

 

正則替換與組引用

replace方法第一個參數可以用Regex來表示需要被替換的內容。

 

var r1 = /^asd$/;str1 = "LandMine LLLLLL";str1 = str1.replace(/L/g,"l"); //g表示全域匹配console.log(str1);  //landMine llllll

 

 

第二個參數出現$後跟數字表示正則組引用

var s = ‘1991-1-2‘;s = s.replace( /(\d+)-(\d+)-(\d+)/g, "$1年$2月$3日" );console.log(s); //1991年1月2日

 

javascript之Regex學習筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.