Javascript 詞邊界:\b

2023-02-17 11:01 更新

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

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

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

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

例如,可以在 Hello, Java! 中找到 \bJava\b 的匹配項,其中 Java 是一個獨立的單詞,而在 Hello, JavaScript! 中則不行。

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

在字符串 Hello, Java! 中,以下位置對應于 \b


因此,它與模式 \bHello\b 相匹配,因為:

  1. 字符串的開頭符合第一個檢查 ?\b?。
  2. 然后匹配了單詞 ?Hello?。
  3. 然后與 ?\b? 再次匹配,因為我們在 ?o? 和逗號之間。

所以模式 \bHello\b 會匹配,但 \bHell\b 不會匹配(因為在 l 之后沒有單詞邊界),Java!\b 也不會匹配(因為感嘆號不是單詞字符 \w,所以其后沒有詞邊界)。

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

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

例如,模式 \b\d\d\b 查找獨立的兩位數(shù)。換句話說,它查找的是兩位數(shù),其周圍是與 \w 不同的字符,例如空格或標點符號(或文本開頭/結尾)。

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? 不適用于非拉丁字母

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

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

任務


查找時間

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

編寫正則表達式在字符串 Breakfast at 09:00 in the room 123:456. 中查找時間。

P.S. 在這個任務里沒有必要校驗時間的正確性,所以 25:99 也可算做有效的結果。

P.P.S. 正則表達式不應該匹配 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)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號