深入淺出正則表達式中的邊界\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!
推薦閱讀:
- 一文帶你徹底搞懂JavaScript正則表達式
- JS正則表達式詳解及身份證號碼驗證(簡易版)
- C++使用正則表達式的詳細教程
- 正則表達式預查的詳細解釋與應用實例
- mysql根據逗號將一行數據拆分成多行數據