正則表達式中:
- b 表示單詞邊界
- B 表示非單詞邊界,應理解為(非單詞)邊界,而不是非(單詞邊界),它仍然匹配的是邊界
邊界
我將正則中的位置分為 字符的占位 和 字符的間隙。
字符的占位是顯式的位置。
以 I'm iron man 為例。
肉眼可見的字母 符號 空格都是可以占位的字符,也就是可以用下標獲取到字符的位置。
字符的間隙是隱式的位置。
即顯示位置之間的位置,比如I和'之間的位置,字符串開頭和I之間的位置等。
邊界 指的是占位的字符左右的間隙位置。
單詞
正則中所說的單詞指的是 \w 可以匹配的字符,即數字、大小寫字母以及下劃線 [0-9a-zA-Z_]
\b 單詞邊界
單詞邊界匹配的就是這樣的間隙位置:
左邊占位的字符或右邊占位的字符,至少有一個不是 \w
1
2
3
4
5
6
7
8
|
// 只有首尾位置匹配 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匹配的 邊界。
1
2
3
4
5
|
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.單詞邊界
1
|
var str = ' 2 ' ; //其中空格與2之間的位置叫做單詞邊界,匹配\b |
2.非單詞邊界
1
2
|
var str = ",,,,,和呵呵,,,,," ; var reg = '\B呵\B' ; //reg匹配中間的呵,其兩側都是字符,中間的位置為非單詞邊界。 |
3.統計以“,”分割的元素中“3”的個數
1
2
|
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這樣的格式
1
2
3
4
5
|
'7654321' .replace(/\B(?=(\d{3})+(?!\d))/g, ',' ) //7,654,321(匹配末尾是非數字,中間是連續3位數字整倍數的非單詞邊界) '99893' .replace(/\B(?=(\d{3})+$)/g, ',' ) // '99,893' |
5.手機號344分割
1
2
|
'12345678901' .replace(/\B(?=(?:\d{4})+$)/g, '-' ) // '123-4567-8901' |
總結
到此這篇關于正則表達式中邊界\b和\B的文章就介紹到這了,更多相關正則表達式邊界\b和\B內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/u012961419/article/details/107462741