亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js中,exec()方法,為何這里的index是5?

js中,exec()方法,為何這里的index是5?

慕田峪9158850 2019-04-10 20:48:52
js高程里的例子(書中P107),不明白為何下面的第二次執行,alert(matches.index)的值是5?為何alert(matches[0])是bat?應該是我exex()方法沒理解透。vartext="cat,bat,sat,fat";varpattern1=/.at/g;varmatches=pattern1.exec(text);alert(matches.index);//0alert(matches[0]);//catalert(pattern1.lastIndex);//3----------matches=pattern1.exec(text);alert(matches.index);//5alert(matches[0]);//batalert(pattern1.lastIndex);//8搜索之后,"有g對exec本身的影響是,當一個具有g的正則表達式調用exec()時,他將該對象的lastIndex設置到緊接這匹配子串的字符位置.當第二次調用exec時將從lastIndex所指示的字符位置開始檢索"看到這句話仍然沒能理解,為何輸出是5?
查看完整描述

2 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

至于為什么是4和7,那就是因為
將該對象的lastIndex設置到緊接這匹配子串的字符位置.當第二次調用exec時將從lastIndex所指示的字符位置開始檢索。
咱們按逗號之后不加空格來說:你看,第一次檢索出來的是cat,第一個字符的索引是0,所以result.index是0,而此時一個檢查字符串中每個字符的指針ptr已經走到t后面了,所以lastIndex是3,就是相當于告訴正則表達式,我們已經檢查到索引為3的地方了,下一次直接從這里開始就好了。
第二次檢索從lastIndex也就是3開始,找到后面的bat之后,匹配成功,bat里第一個字符b是4,所以result.index是4,而我們匹配完整個bat的時候,指針ptr已經走到bat后面了,也就是索引為7的位置,所以結果是4和7。
這樣你再開始下一次檢索的時候,就會從text[7]開始,也就是第二個逗號的位置開始往后找,所以下一次匹配是8,sat,11,再下次12,fat,15。
現在到頭了,再匹配一次的話就是null了,這時候你看看pattern1.lastIndex,已經回到0了。
                            
查看完整回答
反對 回復 2019-04-10
  • 2 回答
  • 0 關注
  • 343 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號