第六周第三天筆記

1.1 正則基礎

  • 正則的含義:由特定的符號組成的具有特殊含義的代碼;
  • 正則的目的:就是制定一些規(guī)則盖腿,來操作(校驗/匹配,捕獲)字符串的內容凤藏;只針對字符串;
  • 正則的操作:
    • 校驗:reg.test(str)堕伪,返回值為布爾值揖庄;如/^2\d{2}/.test(xml.status);,校驗成功,滿足規(guī)則欠雌,就返回true,不滿足規(guī)則蹄梢,就返回false;
    • 捕獲:reg.exec(str),返回值為一個數組;目的:用我制定的規(guī)則去捕獲字符串中的內容禁炒,有就以數組的形式拿出來而咆,沒有就返回null;
  • 字符串與正則配合的方法:
    • match("在字符串中查找內容"): 使匹配,如果存在要查找的內容幕袱,則返回內容暴备,如果不存在,則返回null们豌;
    • replace("被替換的內容","替換的內容"): 不會改變原字符串涯捻,返回一個新的字符串;
    • search():搜索望迎,找到返回其下標值障癌,找不到返回-1;
    • split(separator,limit):字符串轉換為新數組,原字符串不會發(fā)生改變辩尊;
      • separator: 分離器涛浙,用于分割字符串的字符;即將其轉換為逗號摄欲;—可以取空字符“”轿亮;
      • limit:可選參數,即分割幾次蒿涎,數值等于數組元素的個數哀托;
  • 字符串方法代碼格式:
    • str.match();
    • str.replace();
    • str.search();
    • str.split();
  • 正則的方法代碼格式:
    • reg.test();
    • reg.exec();

1.2 正則校驗(匹配)

  • 校驗test()方法講解:
  <script>
    var reg=/圓夢源/;
    //test:里面如果沒有進行限制,只要里面有我要的內容劳秋,都是true仓手;
    console.log(reg.test("圓夢源"));//打印為true
    console.log(reg.test("2322圓夢源dffd"));//打印為true
    var reg2=/^圓夢源$/;
    //test:"^"為開頭,"$"為結尾玻淑,意思是對內容進行了限制嗽冒,所以必須嚴格校驗;
    console.log(reg2.test("圓夢源"));//打印為true
    console.log(reg2.test("2322圓夢源dffd"));//打印為false
  </script>

1.3 正則創(chuàng)建的方式

  • 創(chuàng)建正則的方式分為兩種:字面量創(chuàng)建和實例創(chuàng)建
    • 字面量創(chuàng)建:var reg=/^2\d{2}/;
      • 總結:字面量創(chuàng)建补履,斜杠中不加引號添坊,代表的就是字符串;斜杠中如果加引號箫锤,引號算一個字符贬蛙,代表自己的字符意義;注意谚攒,字面量創(chuàng)建中無法進行變量的拼接阳准;
          //1.字面量創(chuàng)建,var reg=/str/馏臭,斜杠中不加引號野蝇,代表的就是字符串;
          var str="圓夢源";
          var reg=/str/;//此處str指的是一個字符串"str";而不是變量str;
          console.log(reg.test("str"));//打印為true;
          console.log(reg.test("圓夢源"));//打印為false;
          
          //2.字面量創(chuàng)建中绕沈,斜杠中如果加引號锐想,引號算一個字符,代表自己的字符意義
          var reg2=/"+str+"/;//此處的+號乍狐,是把前面的字符多寫幾個赠摇;"號,代表一個字符放在里面澜躺;
          console.log(reg2.test("str"));//打印為false;
          console.log(reg2.test("圓夢源"));//打印為false;
          console.log(reg2.test('""""strrrrr"'));//打印為true;
          console.log(reg2.test('dsfsfsd""""strrrrr"'));//打印為true;校驗不嚴格蝉稳,只要存在內容就行;
          
          //3.注意掘鄙,字面量創(chuàng)建中無法進行變量的拼接耘戚; 
    
    • 實例創(chuàng)建:var reg=new RegExp(" ");
      • 總結:括號中必須加引號,才代表字符串操漠,如果不帶引號收津,就是變量;實例創(chuàng)建可以進行變量拼接浊伙;
          //1.實例創(chuàng)建中撞秋,var reg=new RegExp("str"),括號中必須加引號,才代表字符串嚣鄙,如果不帶引號吻贿,就是變量;
          var str="圓夢源";
          var reg3=new RegExp(str);//括號中不加引號哑子,就指的是變量舅列;
          console.log(reg3.test("圓夢源"));//打印為true;
          console.log(reg3.test("123圓夢源dfsd"));//打印為true;
          console.log(reg3.test("str"));//打印為false;
      
          //2. 實例創(chuàng)建中,括號里加引號卧蜓,此時指的就是字符串帐要,不再是變量;
          var str="圓夢源";
          var reg4=new RegExp("str");
          console.log(reg4.test('圓夢源'));//打印為false;
          console.log(reg4.test("str"));//打印為true;
      
          //3.實例創(chuàng)建可以進行變量拼接弥奸;
          var str="圓夢源";
          var reg6=new RegExp("ti"+str+"an");//變量拼接
          console.log(reg6.test("ti圓夢源an"));//打印為true;
    
    • 字面量創(chuàng)建和實例創(chuàng)建的區(qū)別:
      • 字面量創(chuàng)建無法拼接變量榨惠,實例創(chuàng)建可以拼接變量;
      • 字面量創(chuàng)建不需要轉義盛霎,實例創(chuàng)建需要轉義赠橙,如“\d”等帶斜杠的元字符需要轉義,前面加一個斜杠愤炸;
       var reg=/^2\d{2}$/;//字面量創(chuàng)建中期揪,特殊符號不需要轉義;
       console.log(reg.test("200"));//結果為true;
       var reg2=new RegExp("^2\\d{2}$");//實例創(chuàng)建中摇幻,特殊符號需要轉義横侦,如"\d"前面加"\";
       console.log(reg2.test("200"));//結果為true;
    

1.4 正則表達式的組成

  • 正則表達式組成:由元字符和修飾符兩部分組成;如代碼:var reg=/^2\d{2}/g;
    • 元字符:就是包含在兩個斜杠之間的字符绰姻;
    • 修飾符:就是斜杠外面的字符枉侧;
  • 元字符:包含特殊含義的元字符和量詞元字符
    • 特殊含義的元字符:1)\轉義;2)|或狂芋;3)()分組榨馁;4).除了\n以外的其他字符;5)\n 換行帜矾;6)\b 開頭結尾和空格翼虫;7)^開頭;8)$結尾 9)\s 空格屡萤;10)\S 非空格珍剑;11)\d 數字 12)\D 非數字;13)\w數字死陆,字母招拙,下劃線; 14)\W 非數字措译,字母别凤,下劃線;15)[a-z]a到z之間的小寫字母领虹; 16)[^a-z] 非a到z之間的小寫字母规哪; 17)[abc] 包含abc三個字母中的任何一個,只能是一個塌衰; 18)[^abc] 除了abc三個字母诉稍;
    • 量詞元字符:1)* 0到多次; 2)+ 1到多次猾蒂; 3)? 0或1均唉; 4){n} 正好n次; 5){n,} 最少n次肚菠;n次到多次舔箭; 6){n,m} n次到m次;
  • 修飾符:1)g 全局蚊逢; 2)m 換行层扶; 3) i 忽略大小寫;
  • 知識點:
    • 小括號的用法:
      • 提高優(yōu)先級:/^(18|19)$/;驗證18或19烙荷;
         //目的:驗證18或19
           var reg=/^18|19$/;//分析:1加8或1加9镜会,以1開頭,以9結尾终抽;
           console.log(reg.test("18219"));//結果為true;
           console.log(reg.test("119"));//結果為true;
         //注意:當使用|的時候必須加小括號戳表;
         //正確寫法:
           var reg1=/^(18|19)$/;
           console.log(reg1.test("189"));//結果為false;
           console.log(reg1.test("18"));//結果為true;
      
      • 分組的作用桶至;
      • 小分組的作用;用于exec捕獲匾旭;
    • 中括號的用法:
      • 中括號[]的用法:中括號中不會出現(xiàn)兩位數镣屹;只能出現(xiàn)一個;
          //[abc]意思是abc中的任何一個价涝;不會出現(xiàn)兩個女蜈;
            var reg=/^[11-89]$/;//分析:1或1-8或9,三者中的任何一個
            console.log(reg.test("1"));//結果為true;
            console.log(reg.test("6"));//結果為true;6在1-8之間色瘩;
            console.log(reg.test("11"));//結果為false;11不在三者之間伪窖;
        
      • 中括號[]里面的字符意義會發(fā)生改變,分為兩種居兆,
        • 如"+","."這些元字符覆山,代表加,小數點泥栖;都不用加轉義符汹买;但是在其他的時候必須加轉義符才能代表加,小數點的意思聊倔;
          • 對比1:[+-]指的是+或-晦毙,二者任何一個;此時中括號中的+號耙蔑,不用加轉義符见妒,就代表加號的含義;
          • 對比2:(\+|-)指的是+或-甸陌,二者任何一個须揣;此時在小括號中的+號需要添加轉義符;才代表加號的含義钱豁;
        • 如"\w","\s","\d"這些元字符耻卡,帶斜杠的仍然代表元字符的含義;
    • 中括號和小括號的共同點:是在使用或的時候牲尺,功能是一樣的卵酪;都代表兩者其一丈屹;
      • 中括號:[ab]指的就是a,b二者中任何一個季俩;
      • 小括號:(a|b)指的也是a,b二者中任何一個历谍;
      • 弊端:當a尚蝌,b為數字時,必須是一位數時拉宗,才能用中括號代赁,如果為兩位數缆镣,只能用小括號搓茬;如[1234]代表的意思是1234四位數中的任何一個數犹赖;而(12|34)代表的是12或34队他;
      • 注意:盡量不要用小括號,因為在exec方法捕獲時峻村,會對小括號進行小分組漱挎;會導致錯亂;可以通過添加"?:"來解決雀哨,只匹配不捕獲;
    • 量詞元字符"?"問號的用法:
      • 代表可有可無;如有效數字正則表達式中的使用私爷;
      • 放在正則捕獲中的量詞元字符后面雾棺,添加后,來解決正則捕獲的貪婪性衬浑;如捕獲數字時捌浩,只捕獲一個數字時的使用;

1.5 正則表達式實際應用

  • 有效數字的正則表達式
    • 代碼:var reg=/^[+-]?(((\d)|([1-9]\d+))(\.\d+)?)$/var reg=/^(\+|-)?(((\d)|([1-9]\d+))(\.\d+)?)$/(其中加號要用轉義符);
    • 解讀:
      1. ^指開頭工秩,$ 指結尾
      2. +-都可以尸饺,所以用[+-],可有可無助币,用?
      3. 數字分為整數和小數,用()()
      4. 整數分為兩種浪听,一位數,兩位數或更多眉菱;所以用或迹栓,即()|();
      5. 一位數()可以是0-9之間的任何一個數,所以用\d;
      6. 兩位數或多位數俭缓,第一位不能是0,所以需要1-9之間的數字克伊,用[1-9];第二位可以是0-9之間的數字,用\d,可以是三位數或更多位华坦,用+;
      7. 小數可有可無愿吹,用?;小數中分為小數點和數字惜姐,其中小數點用轉義符\.來組合犁跪,數字可以是0-9之間的任何數字,所以用\d,可以是多位數歹袁,用+;
  • 電話號碼的正則表達式
    • 代碼:var reg=/^1\d{10}$/
    • 解讀:^1指以1開頭耘拇,\d指0-9之間的數字,{10}指正好10位數字宇攻,$指結尾惫叛;
  • 郵箱的正則表達式
    • 代碼:var reg=/^([\w.-]+)@([a-zA-Z0-9]+)((\.[a-zA-Z]{2,4}){1,2})$/
    • 分析:郵箱可能出現(xiàn)的情況:zhan233f_sdi-dfjeif.djife @ qq/163 .com/.cn/.blog
    • 解讀:
      1. 郵箱分為四部分
      2. 第一部分:@前面的部分。有可能出現(xiàn)的情況:小寫字母a-z逞刷;大寫字母A-Z嘉涌;數字0-9妻熊;下劃線_;符號-仑最;符號.
        • [\w.-]+表示上面出現(xiàn)的情況扔役;
          • 其中“小寫字母a-z;大寫字母A-Z警医;數字0-9亿胸;下劃線_;”预皇,用\w表示侈玄;
          • 其中“符號-;符號.”吟温,用[.-]表示序仙,中括號的意思是三者出現(xiàn)任何一個;
          • +的意思是可以出現(xiàn)1到多個鲁豪;
      3. 第二部分:@符號潘悼,直接字符串拼接;
      4. 第三部分:qq或QQ或163或者其他爬橡,但是包括小寫字母a-z治唤;大寫字母A-Z;數字0-9糙申;不包括下劃線肝劲,所以不能用\w;
        • [a-zA-Z0-9]指的就是“小寫字母a-z;大寫字母A-Z郭宝;數字0-9”辞槐;
        • +指的是可以出現(xiàn)1到多次;
      5. 第四部分:“.com/.cn/.blog”粘室,其中可能出現(xiàn)".com"或".com.cn"或".com.blog"三種情況
        • 先創(chuàng)建".com或.cn或.blog"榄檬,\.代表小數點,[a-zA-Z]代表所有的大小寫字母衔统,{2,4}指的是字母出現(xiàn)的次數只能在2到4之間鹿榜;不能是+;
        • 所以(\.[a-zA-Z]{2,4})代表的是".com或.cn或.blog";
        • {1,2}指的是".com或.cn或.blog"出現(xiàn)的次數锦爵,只能出現(xiàn)1到2次舱殿;如".com"或".com.cn"或".com.blog"三種情況
    • 驗證代碼:
       var reg=/^([\w.-]+)@([a-zA-Z0-9]+)((\.[a-zA-Z]{2,4}){1,2})$/;
        console.log(reg.test("135865985@qq.com"));//結果為true;
        console.log(reg.test("135865985@163.com.cn"));//結果為true;
        console.log(reg.test("135865985@qq.com.blog"));//結果為true;
        console.log(reg.test("135865985@qq.com.blogg"));//結果為false;因為.blogg位數超過四位;
    
  • 中文的正則表達式
    • 第一個漢字:“一”,代碼:\u4e00;
    • 最后一個漢字:“龥”险掀,代碼:\u9fa5;
    • 實例:二到四位的漢字沪袭;代碼:var reg=/^[\u4e00-\u9fa5]{2,4}$/
  • 數字18到65之間的正則表達式
    • 分析:將其分解為三部分,18-19,20-59,60-65
    • 代碼:var reg=/^((18|19)|([2-5]\d)|(6[0-5]))$/;注意:有或出現(xiàn)必須加小括號樟氢;
    • 解讀:
      • (18|19)指18或19之間一個數冈绊;
      • [2-5]\d指第一位為2到5之間侠鳄,第二位為0-9之間數字;
      • 6[0-5]指第一位為6死宣,第二位為0-5之間的數字伟恶;
  • 身份證號碼的正則表達式
    • 簡單的正則表達式
      • 分析:身份證總共18位,最后一位可能是數字也可能是字母X
      • 知識點:小括號與中括號中解決或的問題的方法,以及使用小括號的弊端毅该;
      • 代碼:
        var str="130216192305253234";
        var reg=/^\d{17}(\d|X)$/;
        console.log(reg.exec(str));//結果為:["130216192305253234", "4", index: 0, input: "130216192305253234", groups: undefined]
        //此時用exec會出現(xiàn)問題博秫,當用到或的時候,需要用小括號眶掌,但是在exec中會把小括號作為小分組挡育,拿出來;所以會多一項"4"畏线;
        var reg1=/^\d{17}[\dX]$/;
        //避免使用小括號,可以使用中括號良价,來解決或的問題寝殴;
        console.log(reg1.exec(str));//結果為:["130216192305253234", index: 0, input: "130216192305253234", groups: undefined]
      
    • 獲取詳細信息的正則表達式
      • 分析:身份證號碼每一位都有其含義,所以需要小分組將其分別獲取明垢,分類如:兩位省蚣常,四位市縣,四位年痊银,兩位月抵蚊,兩位日,后四位(分為兩位戶口所在地編碼溯革,一位奇偶性別贞绳,最后一位根據前面17位計算出來代表個人信息的)
      • 代碼:
       var str="130216192305253234";
       var reg2=/^(\d{2})(\d{4})(\d{4})(\d{2})(\d{2})(\d{2})(\d)(\d|X)$/;
       console.log(reg2.exec(str));//結果為:["130216192305253234", "13", "0216", "1923", "05", "25", "32", "3", "4", index: 0, input: "130216192305253234", groups: undefined];
      

1.6 正則捕獲

  • 正則中的捕獲,主要講三個方法:
    • exec: reg.exec(str);——正則的方法致稀;
    • match: str.match(reg);——字符串的方法冈闭;
    • replace: str.replace(reg,xxxx);——字符串的方法;

1.6.1 正則exec方法解讀

  • 定義:exec是正則的方法抖单,每次捕獲只能捕獲一個滿足正則的內容萎攒,然后返回的結果是個數組,默認情況下矛绘,數組有4項:
    1. 第一項:符合大正則的內容耍休;(包含小分組內容)
    2. 第二項:如果存在小分組,則第二項內容為小分組的內容货矮;如果存在多個小分組羊精,那么會依次類推到第三項等等;
    3. 第三項:index:對應的值為查找到的內容開始字符所對應的索引囚玫;(位置)
    4. 第四項:input:原始字符串园匹;
  • 代碼:
     var str="huadianxiehe2018zhanwang2019huigu2017huadianxiehe2015";
     var reg=/huadianxiehe(\d+)/g;//此時()為小分組雳刺,所以得到的數組中第二項為小分組內容;
     console.log(reg.exec(str));//結果為:["huadianxiehe2018", "2018", index: 0, input: "huadianxiehe2018zhanwang2019huigu2017huadianxiehe2015", groups: undefined]
     console.log(reg.exec(str));//結果為:["huadianxiehe2015", "2015", index: 37, input: "huadianxiehe2018zhanwang2019huigu2017huadianxiehe2015", groups: undefined]
    
  • 正則捕獲有兩大特點:
    1. 懶惰性:每次找的時候都是從0開始找裸违;
      • 解決措施:添加修飾符全局g掖桦;目的使其按順序找;需注意:當查找到最后一個滿足條件的表達式后供汛,會輸出null枪汪,然后再查找的時候,會重頭開始查找怔昨,無限循環(huán)雀久;
      • 知識點:修飾符g的作用,以及exec捕獲的方式和返回的數組形式趁舀;
      • 代碼對比:
      <script>
          var str="huadianxiehe2018zhanwang2019huigu2017";
          //1.不添加全局g赖捌,每次查找時,都從0開始查找矮烹;
          var reg=/\d+/;
          console.log(reg.exec(str));//結果為:["2018", index: 12, input: "huadianxiehe2018zhanwang2019huigu2017", groups: undefined]
          console.log(reg.exec(str));//結果為:["2018", index: 12, input: "huadianxiehe2018zhanwang2019huigu2017", groups: undefined]
          //2. 添加全局g越庇,每次按順序向后找,需注意:當查找到最后一個滿足條件的表達式后奉狈,會輸出null卤唉,然后再查找的時候,會重頭開始查找仁期,無限循環(huán)桑驱;
          var reg=/\d+/g;
          console.log(reg.exec(str));//結果為:["2018", index: 12, input: "huadianxiehe2018zhanwang2019huigu2017", groups: undefined]
          console.log(reg.exec(str));//結果為:["2019", index: 24, input: "huadianxiehe2018zhanwang2019huigu2017", groups: undefined]
          console.log(reg.exec(str));//結果為:["2017", index: 33, input: "huadianxiehe2018zhanwang2019huigu2017", groups: undefined]
          console.log(reg.exec(str));//結果為:null;
          console.log(reg.exec(str));//結果為:["2018", index: 12, input: "huadianxiehe2018zhanwang2019huigu2017", groups: undefined]
      </script>
      
    2. 貪婪性:在正則代碼中添加"+"號后,就會把所有的輸出來跛蛋,所以比較貪婪熬的;
      • 解決措施:在量詞元字符"+"后面,添加量詞元字符"?"赊级;
      • 知識點:量詞元字符"?"的應用
      • 代碼對比:
       var str="huadianxiehe201823243zhanwang2019huigu2017";
           var reg=/\d+/g;
           console.log(reg.exec(str));//結果為:["201823243", index: 12, input: "huadianxiehe201823243zhanwang2019huigu2017", groups: undefined]
           //分析:添加+號后悦析,exec會一下將201823243全部拿出來,顯示貪婪此衅;
           var reg1=/\d+?/g;
           console.log(reg1.exec(str));//結果為:["2", index: 12, input: "huadianxiehe201823243zhanwang2019huigu2017", groups: undefined]
           console.log(reg1.exec(str));//結果為:["0", index: 13, input: "huadianxiehe201823243zhanwang2019huigu2017", groups: undefined]
           //分析:在+號后面添加?號强戴,會解決它的貪婪性,讓其每次都輸出一個數字挡鞍;
           //修改:如果想要達到捕獲的目的骑歹,一個一個數字的獲取,正則表達式可以寫成 reg=/\d/g;
      
  • 正則屬性方法:
    • lastIndex屬性:
      • 屬性值:若正則表達式中在未添加全局g時墨微,每次exec捕獲都從0開始道媚,此時的lastIndex值都是0;
      • 屬性值:若正則表達式中添加全局g后,指最后一次exec捕獲內容后最域,開始下一次捕獲時谴分,開始查找的字符位置的索引值;需注意:當查找到最后一個滿足條件的表達式后镀脂,會輸出null牺蹄,此時lastIndex值為0;繼續(xù)查找薄翅,就會重頭開始查找沙兰,無限循環(huán);
      • 代碼:
       <script>
           var str="huadianxiehe201823243zhanwang2019huigu2017";
           var reg=/\d+/g;
           console.dir(reg);
           console.log(reg.lastIndex);//結果為:0翘魄;
           console.log(reg.exec(str));//結果為:["201823243", index: 12, input: "huadianxiehe201823243zhanwang2019huigu2017", groups: undefined]
           console.log(reg.lastIndex);//結果為:21鼎天;
           console.log(reg.exec(str));//結果為:["2019", index: 29, input: "huadianxiehe201823243zhanwang2019huigu2017", groups: undefined];
           console.log(reg.lastIndex);//結果為:33暑竟;
           console.log(reg.exec(str));//結果為:["2017", index: 38, input: "huadianxiehe201823243zhanwang2019huigu2017", groups: undefined]斋射;
           console.log(reg.lastIndex);//結果為:42;
           console.log(reg.exec(str));//結果為:null但荤;
           console.log(reg.lastIndex);//結果為:0罗岖;
           //當查找完后,會重復查找纱兑;
           console.log(reg.exec(str));//結果為:["201823243", index: 12, input: "huadianxiehe201823243zhanwang2019huigu2017", groups: undefined]呀闻;
           console.log(reg.lastIndex);//結果為:21化借;
       </script>
      
  • 實例1
    • 需求:獲取字符串中所有的數字潜慎,組成一個數組
    • 代碼:
     <script>
         var str="huadianxiehe2018zhanwang2019huigu2017";
         var reg=/\d+/g;
         var ary=[];
         var res=reg.exec(str);
         while(res){
             ary.push(res[0]);
             res=reg.exec(str);//注意:必須重新賦值,然后再判斷蓖康;
         }
         console.log(ary);//結果為:["2018", "2019", "2017"]铐炫;
     </script>
    

1.6.2 字符串match方法解讀

  • 定義:是字符串的方法,每次能得到所有符合正則的內容蒜焊,并且以一個新數組的形式返回倒信;如果沒有符合規(guī)則的內容,返回null;
  • 代碼:
     var str="huadianxiehe2018zhanwang2019huigu2017huadianxiehe2015";
     var reg=/\d+/g;
     console.log(str.match(reg));//結果為:["2018", "2019", "2017", "2015"]泳梆;
    

1.6.3 exec方法與match方法的區(qū)別

  • exec方法與match方法的區(qū)別:
    • exec方法是RegExp類原型上的方法鳖悠;match方法是字符串原型上的方法;
    • exec方法和match方法优妙,在查找的時候乘综,正則表達式中,如果不添加全局g套硼,則兩個方法拿到的結果是相同的卡辰,都是一個數組,里面有三項;
    • exec方法每次只能拿到一個值九妈;match方法能拿到所有值(前提是正則表達式中添加全局g)反砌,并以新數組的形式返回;針對的都是字符串萌朱;
    • exec方法既能拿到大正則宴树,也能拿到小分組;match方法只能拿到大正則嚷兔,無法拿到小分組森渐;
  • 實例:利用exec方法實現(xiàn)match功能
    <script>
        var str="huadianxiehe2018zhanwang2019huigu2017";
        var reg=/\d+/g;
        //需求:利用exec方法實現(xiàn)match功能
        //第一反應:match方法是誰的方法?——字符串String類原型prototype上的公有屬性;
        //第二反應:match方法中的this是誰?——this指向字符串實例冒晰;
        //第三反應:match方法有什么功能同衣,如何用exec方法去封裝;
        //分析:match方法作用是壶运,獲取str中所有滿足正則表達式reg要求的內容耐齐,作為數組元素,返回一個數組蒋情;
        //進而就決定了函數的參數是reg表達式埠况,返回值為數組,函數中this指向字符串實例棵癣;
        String.prototype.Match=function (Reg) {
            //此時this指向字符串實例,所以就可以用this來代表外面的字符串
            //1.先拿到第一次的exec返回值辕翰;
            var ary=[];
            var ree=Reg.exec(this);
            //2.通過while循環(huán)依次往數組中放我們找到的值,當沒有找到時狈谊,會返回null喜命;
            while(ree){
                ary.push(ree[0]);
                ree=Reg.exec(this);
            }
            //3.返回值;
            return ary;//此時如果不添加返回值河劝,會默認返回this實例對象壁榕,此處添加返回值為數組對象,引用數據類型赎瞎,會重新賦值數組新地址牌里;
        };
        var res=str.Match(reg);
        console.log(res);
    </script>
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市务甥,隨后出現(xiàn)的幾起案子牡辽,更是在濱河造成了極大的恐慌,老刑警劉巖敞临,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件态辛,死亡現(xiàn)場離奇詭異,居然都是意外死亡哟绊,警方通過查閱死者的電腦和手機因妙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門痰憎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人攀涵,你說我怎么就攤上這事铣耘。” “怎么了以故?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵蜗细,是天一觀的道長。 經常有香客問我怒详,道長炉媒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任昆烁,我火速辦了婚禮吊骤,結果婚禮上,老公的妹妹穿的比我還像新娘静尼。我一直安慰自己白粉,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布鼠渺。 她就那樣靜靜地躺著鸭巴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拦盹。 梳的紋絲不亂的頭發(fā)上鹃祖,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音普舆,去河邊找鬼恬口。 笑死,一個胖子當著我的面吹牛奔害,可吹牛的內容都是我干的楷兽。 我是一名探鬼主播地熄,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼华临,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了端考?” 一聲冷哼從身側響起雅潭,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎却特,沒想到半個月后扶供,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡裂明,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片提岔。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡笋敞,死狀恐怖碱蒙,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情夯巷,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布喷兼,位于F島的核電站,受9級特大地震影響后雷,放射性物質發(fā)生泄漏褒搔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一喷面、第九天 我趴在偏房一處隱蔽的房頂上張望惧辈。 院中可真熱鬧,春花似錦盒齿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至甸各,卻和暖如春焰坪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背某饰。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诫尽,地道東北人箱锐。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像驹止,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子臊恋,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容