JavaScriptRegex知識點整理

來源:互聯網
上載者:User

標籤:div   工具   new   null   rom   javascrip   執行個體化   解析   gobject   

1  Regex

    使用單個字串來描述、匹配一系列符號某個句法規則的字串,可以簡單理解為按照某種規則去匹配合格字串。

     Ps:https://regexper.com/  可協助理解Regex,Regex工具

 

 

2  regexp對象         

    JavaScript通過內建對象RegExp支援Regex,有兩種方法執行個體化RegExp對象:字面量、建構函式

 

 

3  預定義類

  .         等價於 [^\r\n]          即除了斷行符號符和分行符號之外的所有字元

  \d        等價於[0-9]            即數字字元

  \D        等價於[^0-9]           即非數字字元

  \s        等價於[\t\n\x0B\f\r]     即空白符

  \S        等價於[^\t\n\x0B\f\r]    即非空白符

  \w       等價於[A-Za-z_0-9]       即單詞字元

  \W       等價於[^a-Za-z_0-9]      即非單詞字元

 

 

4  邊界字元

  ^  即以xxx開始

  $  即以xxx結束

  \b 即單詞邊界

  \B 即非單詞邊界

 

 

5  量詞

  ?  即出現0次或1次,最多1次

  +  即出現1次或多次,最少1次

 *  即出現0次或多次,任意次

{n} 即出現n次

{n,m} 即出現n到m次

{n,}   即至少出現n次

 

 

6  貪婪模式

   \d{3,6}   //儘可能多的匹配

 

 

7  非貪婪模式

   讓Regex儘可能少的匹配,即一旦匹配成功匹配不再繼續嘗試。在量詞後面加上?即可。

  ‘123456789’.match(/\d{3,5}?/g)

 

 

8  分組

   使用()可以達到分組的功能,使量詞作用於分組

   (Byron){3}

 

 

9  或

   使用|可以達到或的效果

   Byron|Casper          Byr(on|Ca)sper

 

 

10 反向引用

   2015-12-25  =》 12/25/2015

   ‘2015-12-25’.replace(/(\d{4})-(\d{2})-(\d{2})/g,’$2$3$1’)

 

 

11  忽略分組

     不希望捕獲某些分組,只需要在分組內加上?:即可

   (?:Byron).(ok)

 

 

12  前瞻

      Regex從文本頭部向尾部開始解析,文本尾部方向,稱為“前”。前瞻就是在Regex匹配到規則的時候,向前檢查是否符合斷言。

      符合和不符合特定斷言稱為肯定/正向匹配和否定/負向匹配。

 

     正向前瞻:exp(?=asser)

     負向前瞻:exp(!=asser)

console.log(‘a2*3‘.replace(/\w(?=\d)/g,‘x‘)); //x2*3 console.log(‘a2*34v8‘.replace(/\w(?=\d)/g,‘x‘));//x2*x4x8 console.log(‘a2*34vv‘.replace(/\w(?=\d)/g,‘x‘));//x2*x4vv console.log(‘a2*34vv‘.replace(/\w(?!\d)/g,‘x‘));//ax*3xxx

 

 

13  對象屬性

      global:是否全域搜尋,預設false;

      ignore:是否大小寫敏感,預設false;

      multiline:多行搜尋,預設值false;

      lastIndex:是當前運算式匹配內容的最後一個字元的下一個位置

      source:Regex的文本字串;

 

 

14  正則對象方法

   (1)     RegExp.prototype.exec(str):使用Regex對字串執行搜尋,並將更新全域RegExp對象的書寫以匹配結果。如果沒有匹配的文本則返回null,否則返回一個結果數組。Index聲明匹配文本的第一個字元的位置;input存放檢索的字串string。

       非全域調用:調用非全域的RegExp對象的exec()時,返回數組;第一個元素是與Regex相匹配的文本,第二個元素是與RegExpObject的第一個子運算式相匹配的文本(如果有的話),第三個元素是與RegExp對象的第二個子運算式相匹配的文本(如果有的話),以此類推。

var reg3=/\d(\w)\d/; var reg4=/\d(\w)\d/g; var ts=‘1a2b3c4d5e‘; var ret=reg3.exec(ts); console.log(reg3.lastIndex + ‘\t‘ + ret.index + ‘\t‘ + ret.toString());//0 0  1a2,a console.log(reg3.lastIndex + ‘\t‘ + ret.index + ‘\t‘ + ret.toString());//0 0  1a2,a while(ret = reg4.exec(ts)){     console.log(reg4.lastIndex + ‘\t‘ + ret.index + ‘\t‘ + ret.toString());//3 0  1a2,a   //7    4  3c4,c }

 

 (2)RegExp.prototype.test(str):用於測試字串參數中是否存在匹配Regex模式的字串。如果存在則返回true,否則返回false。

 

 

14  string與正則相關方法

(1)String.prototype.search(reg):用於檢索字串中指定的子字串,或檢索與Regex相匹配的子字串;方法返回第一個匹配結果index,尋找不到返回-1;search()方法不執行全域匹配,它將忽略g標誌,且總是從字串的開始進行檢索。

console.log("javascript".search(/script/i));//4

 

(2)String.prototype.match(reg):match()方法將檢索字串,以找到一個或多個與regexp匹配的文本;regexp是否具有標誌g對結果影響很大。

如果regexp沒有g標誌,則match()方法就只能在字串中執行一次匹配;如果沒有找到任何匹配的文本,將返回null,否則返回一個數組,其中存放了與它找到的匹配文本有關的資訊。返回數組的第一個元素存放的是匹配文本,而其餘的元素存放的是與Regex的子運算式匹配的文本;除了常規的數組元素外,返回的數組還包括2個對象屬性,index聲明匹配文本的起始字元在字串的位置,input聲明對stringObject的引用。

如果regexp具有全域標誌g,則match()方法將執行全域檢索,找到字串中的所有匹配子字串;沒有找到任何匹配的子串則返回null,如果找到了一個或多個匹配子串,則返回一個數組。數組元素中存放是字串中所有的匹配子串,且沒有index或input屬性。

var reg3=/\d(\w)\d/; var reg4=/\d(\w)\d/g; var ts=‘$1a2b3c4d5e‘; var ret=ts.match(reg3); console.log(ret);//[ ‘1a2‘, ‘a‘, index: 1, input: ‘$1a2b3c4d5e‘ ] console.log(ret.index + ‘\t‘ +reg3.lastIndex);//1  0  ret = ts.match(reg4); console.log(ret);//[ ‘1a2‘, ‘3c4‘ ] console.log(ret.index + ‘\t‘ + reg4.lastIndex);//undefined 0

 

(3)String.prototype.split(reg):經常使用split()方法將字串分割為字元數組,

console.log(‘a,b,c,d‘.split(‘,‘));  //[“a”,”b”,”c”,”d”] console.log(‘a1b2c3d‘.split(/\d/)); //[“a”,”b”,”c”,”d”]

 

(4)String.prototype.replace():

String.prototype.replace(str,replaceStr);String.prototype.replace(reg,replaceStr)String.prototype.replace(reg,function)

 

 

其中,function參數含義,function會在每次匹配替換的時候調用,有四個參數:匹配字串、Regex分組內容,沒有分組則沒有該參數、匹配項在字串中的index、原字串。

 

JavaScriptRegex知識點整理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.