codecamp

Javascript 词边界:\b

词边界 ​\b​ 是一种检查,就像 ​^​ 和 ​$​ 一样。

当正则表达式引擎(实现正则表达式搜索的程序模块)遇到 \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 既可以用于单词,也可以用于数字。

例如,模式 \b\d\d\b 查找独立的两位数。换句话说,它查找的是两位数,其周围是与 \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(或数字或下划线),所以此检查不适用于其他字符,如西里尔字母(cyrillic letters)或象形文字(hieroglyphs)。

任务


查找时间

时间的格式是:小时:分钟。小时和分钟都是两位数,例如 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


Javascript 锚点 ^ $ 的多行模式,修饰符 "m"
Javascript 转义,特殊字符
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

第一部分 JavaScript 编程语言

第三部分 其他文章

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }