深入淺出正則表達(dá)式中的邊界\b和\B
正則表達(dá)式中:
- \b 表示單詞邊界
- \B 表示非單詞邊界,應(yīng)理解為(非單詞)邊界,而不是非(單詞邊界),它仍然匹配的是邊界
邊界
我將正則中的位置分為 字符的占位 和 字符的間隙。
字符的占位是顯式的位置。
以 I'm iron man 為例。
肉眼可見的字母 符號 空格都是可以占位的字符,也就是可以用下標(biāo)獲取到字符的位置。
字符的間隙是隱式的位置。
即顯示位置之間的位置,比如I和'之間的位置,字符串開頭和I之間的位置等。
邊界 指的是占位的字符左右的間隙位置。
單詞
正則中所說的單詞指的是 \w 可以匹配的字符,即數(shù)字、大小寫字母以及下劃線 [0-9a-zA-Z_]
\b 單詞邊界
單詞邊界匹配的就是這樣的間隙位置:
左邊占位的字符或右邊占位的字符,至少有一個(gè)不是 \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匹配中間的呵,其兩側(cè)都是字符,中間的位置為非單詞邊界。
3.統(tǒng)計(jì)以“,”分割的元素中“3”的個(gè)數(shù)
var test = "137,1,33,4,3,6,21,3,35,93,2,98"; var count = test.match(test, "\b3\b").length; //結(jié)果:2
4.千分位分割數(shù)字,將輸出成7,654,321這樣的格式
'7654321'.replace(/\B(?=(\d{3})+(?!\d))/g,',') //7,654,321(匹配末尾是非數(shù)字,中間是連續(xù)3位數(shù)字整倍數(shù)的非單詞邊界) '99893'.replace(/\B(?=(\d{3})+$)/g, ',') // '99,893'
5.手機(jī)號344分割
'12345678901'.replace(/\B(?=(?:\d{4})+$)/g, '-') // '123-4567-8901'
總結(jié)
到此這篇關(guān)于正則表達(dá)式中邊界\b和\B的文章就介紹到這了,更多相關(guān)正則表達(dá)式邊界\b和\B內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
asp.net(c#) 使用Rex正則來生成字符串?dāng)?shù)組的代碼
我們在項(xiàng)目中,經(jīng)常要使用正則表達(dá)式,現(xiàn)在有一個(gè)工具可以按正則表達(dá)式生成數(shù)據(jù).正則表達(dá)式的語法忘記了嗎?2010-05-05JavaScript正則表達(dá)式校驗(yàn)非零的負(fù)整數(shù)實(shí)例
本文分享了JavaScript正則表達(dá)式(^-[1-9]\d*$)校驗(yàn)非零的負(fù)整數(shù)實(shí)例代碼,代碼簡單易懂,需要的朋友可以看下2016-12-12