1. 程式人生 > 程式設計 >深入淺出正則表示式中的邊界\b和\B

深入淺出正則表示式中的邊界\b和\B

目錄
  • 邊界
  • 單詞
    • \b 單詞邊界
    • \B 非單詞邊界
  • 舉列
    • 總結

      正則表示式中:

      • \b 表示單詞邊界
      • \B 表示非單詞邊界,應理解為(非單詞)邊界,而不是非(單詞邊界),它仍然匹配的是邊界

      邊界

      我將正則中的位置分為 字元的佔位 和 字元的間隙。

      字元的佔位是顯式的www.cppcns.com位置。

      以 I'm iron man 為例。

      肉眼可見的字母 符號 空格都是可以佔位的字元,也就是可以用下標獲取到字元的位置。

      字元的間隙是隱式的位置。

      即顯示位置之間的位置,比如I和'之間的位置,字串開頭和I之間的位置等。

      邊界 指的是佔位的字元左右的間隙位置。

      單詞

      正則中所說的單詞指的是 \w 可以匹配的字元,即數字、大小寫字母以及下劃線 [0-9a-zA-Z_]

      \b 單詞邊界

      單詞邊界匹配的就是這樣的間隙位置:

      左邊佔位的字元或右邊佔位的字元,至少有一個不是 \w

      // 只有首尾位置匹配
      console.log('0aZ_'.replace(/\b/g,'.')) // .0aZ_.
      
      // +不是\w,所以它的左右間隙都可以被匹配
      console.log('a+a'.replace(/\b/g,'.')) // .a.+.a.
      
      // 空格也不是\w,所以它的左http://www.cppcns.com右間隙都可以被匹配
      console.log('a a'.replace(/\b/g,'.')) // .a. .a.
      

      \B 非單詞邊界

      理解了 \b,\B就好理解了。

      它匹配的也是 邊界 ,針對的是 與 \b 相反 的 非單詞(\W)。

      也就是,左右佔位的字元,都必須是 \w。

      或者說 所有不能被\b匹配的 邊界。

      console.log('0aZ_'.replace(/\B/g,'.')) // 0.a.Z._
      
      console.log('a+a'.replace(/\B/g,'.')) // a+a.
      
      console.log('a a'.replace(/\B/g,'.')) // a a
      
      

      舉列

      1.單詞邊界

      var str = ' 2 ';//其中空格與2之間的位置叫做單詞邊界,匹配\b
      

      2.非單詞邊界

      var str = ",和呵呵,";
      var reg = '\B呵\B';//reg匹配中間的呵,其兩側都是字元,中間的位置為非單詞邊界。
      

      3.統計以“,”分割的元素中“3”的個數

      var test = "137,1,33,4,3,6,21,35,93,2,98"; 
      var count = test.match(test,"\b3\b").length; //結果:2
      

      4.千分位分割數字,將輸出成7,654,32www.cppcns.com1這樣的格式

      '7654321'.replace(/\B(?=(\d{3})+(?!\d))/g,',')
      //7,321(匹配末尾是非數字,中間是連續3位數字整倍數的非單詞邊界)
      
      '99893'.replace(/\B(?客棧;=(\d{3})+$)/g,')
      // '99,893'
      
      

      5.手機號344分割

      '12345678901'.replace(/\B(?=(?:\d{4})+$)/g,'-')
      // '123-4567-8901'
      
      

      總結

      到此這篇關於正則表示式中邊界\b和\B的文章就介紹到這了,更多相關正則表示式邊界\b和\B內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!