一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - 一個關于JS正則匹配的踩坑記錄

一個關于JS正則匹配的踩坑記錄

2022-02-28 16:46我叫宋大宗 js教程

這篇文章主要給大家介紹了一個關于JS正則匹配的踩坑記錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

最近發現在JS里的正則匹配有一個坑,而且當時很莫名奇妙,一度讓我懷疑出現了靈異事件。

下面是踩坑代碼

?
1
2
3
4
5
6
7
var str=["二七1","二七2","金水","二七3","二七4","二七5"]
     var reg=new RegExp("二七","g");
     for(var i=0;i<str.length;i++){
         if(reg.test(str[i])){
             console.log(str[i])
         }
     }

我用正則對str進行全局匹配,當滿足的時候打印出來,于是乎我就得到了這個

一個關于JS正則匹配的踩坑記錄

莫名的少了兩個,然后我對它進行單獨的判斷

?
1
2
3
4
5
6
7
8
9
10
11
12
13
var str=["二七1","二七2","金水","二七3","二七4","二七5"]
  var reg=new RegExp("二七","g");
  for(var i=0;i<str.length;i++){
      if(reg.test(str[i])){
          console.log(str[i])
      }
      if(i==1){
          console.log(reg.test(str[i]))
      }
      if(i==4){
          console.log(reg.test(str[i]))
      }
  }

于是我得到了這個

一個關于JS正則匹配的踩坑記錄

又少了一個,但可以看到之前所缺失的兩個是滿足正則判斷的,然后我在網上找到了下面這段話:

如果在正則匹配中成功匹配到字符串,lastIndex會被設置為第一次匹配到的字符串的位置,以作為字符串全局匹配下次檢索的起點,如果后面字段還能匹配成功,那么lastIndex會被反復重新賦值,直到匹配失敗,它會被重置為0;

但我去請教了一下我的老師,他告訴我的是匹配到后是將lastIndex+1返回過去,也就是當我第一次匹配到后,lastIndex是2,這個2是字符串里的下標,而不是數組的下標,所以在對str[1]進行判斷時是從字符串下標為2的開始,而不是從0開始,所以第二次判斷為false,這時匹配失敗,lastIndex被置為0,所以第三次可以匹配成功。

所以在判斷結果為true后將lastIndex置為0,這樣數據就正常了。

一個關于JS正則匹配的踩坑記錄

數據就正常了。

總結

如果使用全局匹配,那么在每一次查到后將lastIndex置零,或者不使用全局匹配,直接匹配即可。

這里奉上網友的總結:

lastIndex從字面上來講就是最后一個索引,實際上它的意思是正則表達式開始下一次查找的索引位置,第一次的時候總是為0的,第一次查找完了的時候會把lastIndex的值設為匹配到得字符串的最后一個字符的索引位置加1,第二次查找的時候會從lastIndex這個位置開始,后面的以此類推。如果沒有找到,則會把lastIndex重置為0。要注意的是,lastIndex屬性只有在有全局標志正則表達式中才有作用,如果我們把上面代碼中正則表達式的g標志去掉,那么三次彈出的就都是true了。

需要的朋友可以參考下,到此這篇關于一個關于JS正則匹配的踩坑記錄的文章就介紹到這了,更多相關JS正則匹配踩坑內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_42649356/article/details/115556817

延伸 · 閱讀

精彩推薦
  • js教程如何利用JavaScript實現二叉搜索樹

    如何利用JavaScript實現二叉搜索樹

    這篇文章主要給大家介紹了關于如何利用JavaScript實現二叉搜索樹的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學...

    瘋狂的技術宅7802022-02-22
  • js教程微信小程序學習之自定義滾動彈窗

    微信小程序學習之自定義滾動彈窗

    這篇文章主要給大家介紹了關于微信小程序學習之自定義滾動彈窗的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考...

    юноша9272021-12-15
  • js教程three.js中多線程的使用及性能測試詳解

    three.js中多線程的使用及性能測試詳解

    這篇文章主要給大家介紹了關于three.js中多線程的使用及性能測試的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考...

    郭先生的博客4702021-12-28
  • js教程JS數組索引檢測中的數據類型問題詳解

    JS數組索引檢測中的數據類型問題詳解

    這篇文章主要給大家介紹了關于JS數組索引檢測中的數據類型問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考...

    行舟客11932021-12-29
  • js教程一起來了解一下JavaScript的預編譯(小結)

    一起來了解一下JavaScript的預編譯(小結)

    這篇文章主要介紹了一起來了解一下JavaScript的預編譯(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    前端布吉島12022022-01-25
  • js教程基于JavaScript實現簡單的輪播圖

    基于JavaScript實現簡單的輪播圖

    這篇文章主要為大家詳細介紹了基于JavaScript實現簡單的輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    llt2990225342022-01-25
  • js教程ES6的循環與可迭代對象示例詳解

    ES6的循環與可迭代對象示例詳解

    這篇文章主要給大家介紹了關于ES6的循環與可迭代對象的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    瘋狂的技術宅11722022-01-12
  • js教程微信小程序實現無縫滾動

    微信小程序實現無縫滾動

    這篇文章主要為大家詳細介紹了微信小程序實現無縫滾動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Edward_Cullens10792022-02-19
主站蜘蛛池模板: 新新电影理论中文字幕 | 国内自拍网红在线自拍综合 | 女张腿男人桶羞羞漫画 | 午夜网| 欧美国产精品 | 亚洲精品国产一区二区在线 | 人人福利 | 精品精品国产yyy5857香蕉 | 人体欣赏孕妇季玥图片 | 9久热这里只有精品免费 | 女人用粗大自熨喷水在线视频 | 女人和男人搞基 | youjizzxxx在线观看 | 国产普通话对白露脸流出 | 被教官揉了一晚上的奶小说 | 日本xxx在线观看免费播放 | 日韩在线中文字幕 | 精品国产品在线18年 | 美女靠逼的视频 | 亚洲第一区二区快射影院 | 国产午夜小视频 | 大桥未久aⅴ一区二区 | 哇嘎在线精品视频在线观看 | 亚洲精品AV无码永久无码 | 423hk四虎| 亚洲精品一区二区三区在线播放 | 俄罗斯一级在线播放 | 亚洲品质自拍视频 | 欧美a级v片在线观看一区 | 天美传媒tm0087| 5g影院天天爽 | 国产精品亚洲片在线观看麻豆 | 呜嗯啊野战h呻吟男男双性 污小说在线阅读 | heyzo1754北岛玲在线视频 | 69萝莉| 亚洲欧美日韩综合在线 | a男人天堂 | 亚洲spank男男实践网站 | 亚洲AV国产精品无码精 | 30分钟的高清视频在线观看 | 色综合久久六月婷婷中文字幕 |