Javascript 詞邊界:\b

2023-02-17 11:01 更新

詞邊界 ?\b? 是一種檢查,就像 ?^? 和 ?$? 一樣。

當(dāng)正則表達(dá)式引擎(實(shí)現(xiàn)正則表達(dá)式搜索的程序模塊)遇到 \b 時(shí),它會(huì)檢查字符串中的位置是否是詞邊界。

有三種不同的位置可作為詞邊界:

  • 在字符串開(kāi)頭,如果第一個(gè)字符是單詞字符 ?\w?。
  • 在字符串中的兩個(gè)字符之間,其中一個(gè)是單詞字符 ?\w?,另一個(gè)不是。
  • 在字符串末尾,如果最后一個(gè)字符是單詞字符 ?\w?。

例如,可以在 Hello, Java! 中找到 \bJava\b 的匹配項(xiàng),其中 Java 是一個(gè)獨(dú)立的單詞,而在 Hello, JavaScript! 中則不行。

alert( "Hello, Java!".match(/\bJava\b/) ); // Java
alert( "Hello, JavaScript!".match(/\bJava\b/) ); // null

在字符串 Hello, Java! 中,以下位置對(duì)應(yīng)于 \b


因此,它與模式 \bHello\b 相匹配,因?yàn)椋?

  1. 字符串的開(kāi)頭符合第一個(gè)檢查 ?\b?。
  2. 然后匹配了單詞 ?Hello?。
  3. 然后與 ?\b? 再次匹配,因?yàn)槲覀冊(cè)?nbsp;?o? 和逗號(hào)之間。

所以模式 \bHello\b 會(huì)匹配,但 \bHell\b 不會(huì)匹配(因?yàn)樵?nbsp;l 之后沒(méi)有單詞邊界),Java!\b 也不會(huì)匹配(因?yàn)楦袊@號(hào)不是單詞字符 \w,所以其后沒(méi)有詞邊界)。

alert( "Hello, Java!".match(/\bHello\b/) ); // Hello
alert( "Hello, Java!".match(/\bJava\b/) );  // Java
alert( "Hello, Java!".match(/\bHell\b/) );  // null(無(wú)匹配項(xiàng))
alert( "Hello, Java!".match(/\bJava!\b/) ); // null(無(wú)匹配項(xiàng))

\b 既可以用于單詞,也可以用于數(shù)字。

例如,模式 \b\d\d\b 查找獨(dú)立的兩位數(shù)。換句話說(shuō),它查找的是兩位數(shù),其周?chē)桥c \w 不同的字符,例如空格或標(biāo)點(diǎn)符號(hào)(或文本開(kāi)頭/結(jié)尾)。

alert( "1 23 456 78".match(/\b\d\d\b/g) ); // 23,78
alert( "12,34,56".match(/\b\d\d\b/g) ); // 12,34,56

詞邊界 ?\b? 不適用于非拉丁字母

詞邊界測(cè)試 \b 檢查該位置的一側(cè)是否匹配 \w,而另一側(cè)則不匹配 “\w”。

但是,\w 表示拉丁字母 a-z(或數(shù)字或下劃線),所以此檢查不適用于其他字符,如西里爾字母(cyrillic letters)或象形文字(hieroglyphs)。

任務(wù)


查找時(shí)間

時(shí)間的格式是:小時(shí):分鐘。小時(shí)和分鐘都是兩位數(shù),例如 09:00。

編寫(xiě)正則表達(dá)式在字符串 Breakfast at 09:00 in the room 123:456. 中查找時(shí)間。

P.S. 在這個(gè)任務(wù)里沒(méi)有必要校驗(yàn)時(shí)間的正確性,所以 25:99 也可算做有效的結(jié)果。

P.P.S. 正則表達(dá)式不應(yīng)該匹配 123:456。


解決方案

答案是:\b\d\d:\d\d\b

alert( "Breakfast at 09:00 in the room 123:456.".match( /\b\d\d:\d\d\b/ ) ); // 09:00


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)