正則表達式

1、RegExp對象

  字面量:var reg = /abc/;正則表達式

  構造函數:var reg = new RegExp('abc');數組

2、修飾符

  g:global 全文搜索,如不添加g,搜索到第一個匹配中止函數

  i:ignore case 忽略大小寫,默認大小寫敏感測試

  m:multiple lines 多行搜索spa

3、元字符

  3.1 經常使用元字符

  \t 水平製表符prototype

  \v 垂直製表符3d

  \n 換行符regexp

  \r 回車符對象

  \0 空字符ip

  \f 換頁符

  \cX 與X對應的控制字符(Ctrl+X)

  3.2 字符類

  [ ]:構建一個簡單的類,如'[a1b2c3d4]'.replace(/[abc]/g,'x')---->x1x2x3d4

  反向類/負向類:

  [^abc],表示不是字符a或b或c的內容。'[a1b2c3d4]'.replace(/[^abc]/g,'x')---->axbxcxxx

  範圍類:

  [a-z]:從a到z任意字符,包括a和z

  [a-zA-Z]:從a到z大小寫

  [0-9-]:從0到9包括‘-’

  預約義類

  .:等價於[^\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] 非單詞字符

  邊界

  ^:以xxx開始

  $:以xxx結束

  \b:單詞邊界

  \B:非單詞邊界

  量詞

  ?:出現零次或一次(最多出現一次)

  +:出現一次或屢次(至少出現一次)

  *:出現零次或屢次(任意次)

  {n}:出現n次

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

  {n,}:至少出現n次

  貪婪模式與非貪婪模式

  貪婪模式:儘量多的匹配 如:'12345678'.replace(/\d{3,6}/g,'X');----->'X78'

  非貪婪模式:在量詞後面加上?便可。讓正則表達式儘量少的匹配,一旦匹配成功便再也不繼續匹配。如:'12345678'.replace(/\d{3,6}?/g,'X');----->'XX78'

4、分組

  ( ):分組,使量詞做用於分組  如:'a1b2c3d4'.replace(/([a-z]\d){3}/g,'X');---->'Xd4'

  |:或  如:'abonerabcaer'.replace(/ab(on|ca)er/g,'X')---->'XX'

  反向引用:用$1-$n來表明捕獲的分組

       如:'2016-11-25'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2/$3/$1')----->'11/25/2016'

  忽略分組:不但願捕獲某些分組,只需在分組內加上? : 就能夠

       如:(?:bad).(boy)

5、前瞻

  前瞻:正則表達式從文本頭部向尾部開始解析,文本尾部方向,稱爲「前」。前瞻就是在正則表達式匹配到規則的時候,向前檢查是否符合斷言,後顧/後瞻方向相反。

  JavaScript不支持後顧。

  符合和不符合特定斷言稱爲確定/正向匹配和否認/負向匹配

  正向前瞻:exp(?=assert)

       如:\w(?=)

       'a2*3'.replace(/\w(?=\d)/g,'X')---->'X2*3'

       'a2*34b8'.replace(/\w(?=\d)/g,'X')---->'X2*X4X8'

  負向前瞻:exp(?!assert)

       如:'a2*34b8'.replace(/\w(?!\d)/g,'X')---->'aX*3Xb8'

  正向後顧:exp(?<=assert) JavaScript不支持

  負向後顧:exp(?<!assert)  JavaScript不支持

6、JS對象屬性

  global:是否全文搜索,默認false

  ignore case:是否大小寫敏感,默認是false

  multiline:多行搜索,默認值是false

  lastIndex:當前表達式匹配內容的最後一個字符的下一個位置

  source:正則表達式的文本字符串

      如:var reg = /\w/;  reg.source----->'\w'

7、正則表達式的方法

  RegExp.prototype.test(str)

  用於測試字符串參數中是否存在匹配正則表達式模式的字符串,若是存在返回true,不然返回false

  如:var reg1 = /\w/;  var reg2 = /\w/g;   while(reg2.test('ab')){console.log(reg2.lastIndex);}---->1   2

  RegExp.prototype.exec(str)

  使用正則表達式模式對字符串執行搜索,並將更新全局RegExp對象的屬性以反映匹配結果

  若是沒有匹配的文本則返回null,不然返回一個結果數組

  非全局調用:調用非全局的RegExp對象的exec()時,返回數組。第一個元素是與正則表達式相匹配的文本;第二個元素是與RegExpObject的第一個子表達式相匹配的文本(若是有的話);第三個元素是與RegExp對象的第二個子表達式相匹配的文本(若是有的話),以此類推

  String.prototype.search(reg)

  search()方法用於檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串

  方法返回第一個匹配結果Index,查找不到返回-1

  search()方法不執行全局匹配,它將忽略標誌g,而且老是從字符串的開始進行檢索

   String.prototype.match(reg)

  match()方法將檢索字符串,以找到一個或多個與regexp匹配的文本

  regexp是否具備標誌g,對結果影響很大

  非全局調用:

    若是regexp沒有標誌g,那麼match()方法就只能在字符串中執行一次匹配;

    若是沒有找到任何匹配的文本,將返回null;

    不然它將返回一個數組,其中存放了與它找到的匹配文本有關的信息;

    返回數組的第一個元素存放的是匹配文本,而其他的元素存放的是與正則表達式的子表達式匹配的文本;

    除了常規的數組元素以外,返回的數組還含有2個對象屬性

      index聲明匹配文本的起始字符在字符串的位置

      input聲明對stringObject的引用

  全局調用:

    若是regexp具備標誌g則match()方法將執行全局檢索,找到字符串中全部匹配的子字符串

      沒有找到任何匹配的子串,則返回null

      若是找到了一個或多個匹配子串,則返回一個數組

    數組元素中存放的是字符串中全部的匹配子串,並且也沒有index屬性或input屬性

  String.prototype.split(reg)

  split方法把字符串分割爲字符數組

  如:'a,b,c,d'.split(',');---->['a','b','c','d']

  一些複雜的分割狀況下咱們可使用正則表達式解決

  如:'a1b2c3d'.split(/\d/g);---->['a','b','c','d']

  String.prototype.replace

  String.prototype.replace(str,replaceStr)

  String.prototype.replace(reg,replaceStr)

  String.prototype.replace(reg,function)

  function參數含義

  function會在每次匹配替換的時候調用,有四個參數

    匹配字符串

    正則表達式分組內容,沒有分組則沒有該參數

    匹配項在字符串中的index

    原字符串

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