正規表示式 \b元字元

admin發表於2018-09-06

\b元字元可以匹配字元的邊界,也就是它匹配的是一個位置,而不是一個真正的字元。

此位置一側是字元,另一側是非字元或者字串邊界(開始或者結束位置)。

關於元字元概念可以參閱正規表示式元字元與普通字元一章節。

正規表示式還有其他可以匹配邊界的元字元,例如:

(1).^元字元,具體參閱正規表示式 ^元字元一章節。

(2).$元字元,具體參閱正規表示式 $元字元一章節。

^元字元匹配字串的起始位置,$元字元匹配字串的結尾位置,而\b匹配的卻是字元的邊界位置。

但是需要特別注意的是,\b視角下的字元與^和$視角下的字元是構成是不同的,^和$視角下的字元就是我們普通意義上亂七八糟的東西都可以,但是\b視角下的字元就比較侷限,後面會有介紹。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
new RegExp("\\b")

使用建構函式方式建立正規表示式物件。

[JavaScript] 純文字檢視 複製程式碼
/\b/

使用直接量方式建立。

更多建立正規表示式內容參閱JavaScript建立正規表示式一章節。

瀏覽器支援:

(1).IE瀏覽器支援此元字元。

(2).火狐瀏覽器支援此元字元。

(3).火狐瀏覽器支援此元字元。

(4).谷歌瀏覽器支援此元字元。

(5).opera瀏覽器支援此元字元。

(6).safria瀏覽器支援此元字元。

一."字元"的構成:

\b可以匹配字元的邊界,那麼就需要界定一下,在此上下文中"字元"的構成。

通常情況下,正則中"字元"就是\w可以匹配的字元,於是明晰\w的匹配範圍是關鍵。

在支援ASCII碼的語言中,\w與[a-zA-Z0-9_]等同,JavaScript正是如此。

其他程式語言會有所不同,但本文是JavaScript相關的正則知識,其他語言的不同點不做介紹。

二.程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="ab<";
let reg=/\w/g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/06/003959ujvgbe8bk9bf2g02.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

由此可見"<"並不屬於所謂的"字元"。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="antzone";
let reg=/antzon(\b)/;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/06/004038se8bqmztk8gneqzh.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

正則匹配失敗,原因很明顯,"n"字元後面並不是它邊界。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="antzon<";
let reg=/antzon(\b)/;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/06/004119ns292v1jyzy55jyy.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

正則匹配成功,因為"<"不在[a-zA-Z0-9_]範圍之內,那麼"n"的右側是它的邊界。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="I love you";
let reg=/love(\b)/g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/06/004156cl3oxpzx04lpp783.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼正則匹配成功,因為"e"的右側是空白內容,不在[a-zA-Z0-9_]範圍之內。

那麼可以認為"e"的右側是它的邊界。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="螞蟻部落>";
let reg=/螞蟻部落(\b)/;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/06/114907o9ajo6myw5xjfyfo.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼中,\b匹配的位置的右側確實是非字元,但是它的左側同樣也是非字元。

所以正規表示式匹配失敗。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
let str="I love you";
let reg=/love$/g;
console.log(str.match(reg));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201809/06/004229nccs75f7uy70nosd.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述正規表示式匹配失敗。

雖然"e"的右側是字元的邊界,也是單詞love的結尾,但是它不是整個字串的結尾。

對於^元字元也是如此,這裡不舉例子了。

相關文章