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

正則表達式中:

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

邊界

我將正則中的位置分為 字符的占位 和 字符的間隙。

字符的占位是顯式的位置。

以 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,所以它的左右間隙都可以被匹配
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,3,35,93,2,98"; 
var count = test.match(test, "\b3\b").length; //結果:2

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

'7654321'.replace(/\B(?=(\d{3})+(?!\d))/g,',')
//7,654,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內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: