午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

WEB前端第四十課——正則表達(dá)式-RegExp、高級

 小仙女本仙人 2021-09-19

1.RegExp對象

  正則表達(dá)式的基本語法是:/正則表達(dá)式主體/修飾符(可選),這種創(chuàng)建正則的方法稱為“字面量創(chuàng)建正則表達(dá)式”。

  在 js中已經(jīng)為正則表達(dá)式提供了一個“構(gòu)造函數(shù)RegExp”,我們可以通過這個構(gòu)造函數(shù)生成正則表達(dá)式的實(shí)例,

  這種創(chuàng)建正則的方法稱之為“構(gòu)造函數(shù)創(chuàng)建正則表達(dá)式”。

  對于RegExp函數(shù)生成的正則實(shí)例,既能夠和之前使用正則表達(dá)式一樣直接使用,還可以調(diào)用一些RegExp獨(dú)有的方法。

  語法:

    var reg = new RegExp('正則表達(dá)式主體','修飾符');  //RegExp也稱為“正則類”

    注意,通過構(gòu)造函數(shù)方式創(chuàng)建正則表達(dá)式,參數(shù)均采用“字符串”的形式來聲明!

    特別注意,這種方式的正則表達(dá)式主體在使用元字符時,需要使用轉(zhuǎn)義字符“\”,比如“\\d、\\s”等

2.RegExp對象方法

 ?、?nbsp;test()方法,用于判斷在目標(biāo)字符串中是否存在滿足正則表達(dá)式規(guī)則的子字符串,返回值為Boolean。

    語法:正則表達(dá)式 .test( ' 指定字符串 ' );  // true || false

    示例:

      var regExp = new RegExp('ab', 'g');

      var res = regExp .test('abc123AABBCC');

      console .log(res);  //返回值為“true”

    RegExp中提供的方法對于“字面量創(chuàng)建正則表達(dá)式”也是適用的,示例如下:

      console.log(/ab/g .test('abc123AABBCC'));  // true

 ?、?nbsp;exec()方法,用于查找在目標(biāo)字符串中“第一個”滿足正則表達(dá)式的子字符串出現(xiàn)的“下標(biāo)和內(nèi)容”

         返回值是一個信息集合(對象),可以像數(shù)組一樣使用,查找失敗則返回 null

    語法:正則表達(dá)式 .exec('目標(biāo)字符串');

    示例01:

      var regExp = new RegExp('ab', 'ig');

      var res = regExp .exec('abc123AABBCC');

      console .log(res);  //返回值:["ab", index: 0, input: "abc123AABBCC", groups: undefined]

      res = regExp .exec('abc123AABBCC');

      console .log(res);  //返回值:["ab", index: 7, input: "abc123AABBCC", groups: undefined]

      res = regExp .exec('abc123AABBCC');

      console .log(res);  //返回值:null

    可以看出,當(dāng) exec()方法連續(xù)多次查找時,每次查找都是建立在前一次的基礎(chǔ)上,依次向后匹配。

    這是由于RegExp正則對象中提供了一個隱式參數(shù)“l(fā)astIndex”,

    這個參數(shù)將記錄每次執(zhí)行檢索完成時,匹配結(jié)果的最后一個字符的下標(biāo),并且將其作為下次檢索的開始位置。

    這個屬性是可寫的,

      如果上述示例中第一次檢索完成后增加“res.lastIndex=0;”,那么第二次檢索返回值將和第一次相同。

    示例02:

      var regExp = new RegExp('(ab)c', 'ig');

      var res = regExp .exec('abc123AABBCC');

      console .log(res);  //返回值:["abc", "ab", index: 0, input: "abc123AABBCC", groups: undefined]

      console .log(res.length);  // 返回值:2

    上述結(jié)果看出,當(dāng)聲明正則的時候,如果參數(shù)中存在小括號(又稱作組匹配符號),
    那么返回結(jié)果的 length就不為“1”(即不僅查找一次),
    也就是說第一次查找“正則主體內(nèi)容”,第二次查找“組匹配內(nèi)容”,兩次結(jié)果一起返回。

3.檢索模式的“^和$”字符

   “ ^ ”初位字符,表示判斷字符串以某個內(nèi)容開始

  “ $ ”末位字符,表示判斷字符串以某個內(nèi)容結(jié)束

  語法示例:

    var regExp = new RegExp('^abc','ig');  //判斷是否以abc字符串開始

    var regExp = new RegExp('abc$','ig');  //判斷是否以abc字符串結(jié)束

  如果同時使用“^和$”(如“^abc$”),表示在目標(biāo)字符串中與正則字符串本身相同

  代碼示例:

    var regExp=new RegExp('c$','ig');
    var str='abc123AABBCC';
    var res=regExp.test(str);
    console.log(res);    // true

4.重復(fù)類

  重復(fù)類是正則表達(dá)式中使用大括號“{}”進(jìn)行檢索的一種模式,{}用來匹配符合正則要求的字符串連續(xù)出現(xiàn)的次數(shù)。

  通常配合表達(dá)式模式一起使用

  常見寫法有以下三種:

    {n},表示檢索內(nèi)容連續(xù)出現(xiàn) n次

    {n,},表示檢索內(nèi)容至少連續(xù)出現(xiàn) n次

    {n,m},表示檢索內(nèi)容連續(xù)出現(xiàn)大于等于 n次,小于等于 m次

  語法示例:

    var regExp = new RegExp('[a-z]{2}','g');  //表示 全局檢索連續(xù)出現(xiàn)的兩個小寫字母

  代碼示例:

    var regExp=new RegExp('[a-z]{2}','ig');
    var str='abc123AABBCC';
    var res=str.match(regExp);
    console.log(res);    //返回結(jié)果:(4) ["ab", "AA", "BB", "CC"]

  注意,如果不存在“組匹配符號”,那么重復(fù)類僅對其前面的一個字符有效!

  示例代碼:

    var regExp=new RegExp('ab{2}','ig');
    var str='abcabc123AABBCC';
    var res=str.match(regExp);
    console.log(res);    //返回結(jié)果:["ABB"]
    var regExp=new RegExp('(abc){2}','ig');
    var str='abcabc123AABBCC';
    var res=str.match(regExp);
    console.log(res);    //返回結(jié)果:["abcabc"]

5.貪婪模式、懶惰模式

  貪婪模式(greed)、懶惰模式(lazy),這兩種模式都是被固化至表達(dá)式內(nèi)的兩種隱形的檢索模式,

  它們不屬于任何一種前述的檢索模式,而是在此之外隱形生效的。

  貪婪模式,

    正則要求就一直向下匹配,直到無法再匹配為止的行為模式(如 n*)

  懶惰模式,

    一旦匹配到符合正則要求的內(nèi)容就立即結(jié)束檢索的行為模式(如 n?)

  在正則中,不同的符號可以隱式說明當(dāng)前的正則是采用貪婪模式還是懶惰模式。

  常見符號:

    貪婪模式:+、*、{n,}、{n,m}、……

    懶惰模式:+?、?、*?、{n}、{n}?、{n,m}?、……

  代碼示例:

    //---貪婪模式---
    var regExp=new RegExp('s[a-z0-9]+s','ig');
    var str='abscabc12S3AeSvBhC2286s96';
    var res=str.match(regExp);
    console.log(res);    //返回值:["scabc12S3AeSvBhC2286s"]
    //---懶惰模式---
    var regExp=new RegExp('s[a-z0-9]+?s','ig');
    var str='abscabc12S3AeSvBhC2286s96';
    var res=str.match(regExp);
    console.log(res);    //返回值:["scabc12S", "SvBhC2286s"]

6.脫字符  

  脫字符是正則中“^”符號的一種特殊表達(dá)方式,表示“不是……”的意思,

  當(dāng)且僅當(dāng)“^”符號出現(xiàn)在中括號的首位時,我們稱之為脫字符。

  寫在正則主體首位而不是中括號內(nèi)表示初位字符,寫在中括號內(nèi)卻沒有寫在首位則表示普通字符。

  中括號內(nèi)只有脫字符時“[^]”,表示所有字符!

  代碼示例:

    var regExp=new RegExp('[^bc]+','ig');
    var str='abscabc12S3AeSvBhC2286s96';
    var res=str.match(regExp);
    console.log(res);    //返回結(jié)果:["a", "s", "a", "12S3AeSv", "h", "2286s96"]

  

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多