单词边界 \b
是一个测试,就像 ^
和 $
一样。
当正则表达式引擎(实现正则表达式搜索的程序模块)遇到 \b
时,它会检查字符串中的位置是否为单词边界。
有三种不同的位置符合单词边界
- 在字符串开头,如果第一个字符串字符是单词字符
\w
。 - 在字符串中的两个字符之间,其中一个是单词字符
\w
,另一个不是。 - 在字符串结尾,如果最后一个字符串字符是单词字符
\w
。
例如,正则表达式 \bJava\b
将在 Hello, Java!
中找到,其中 Java
是一个独立的单词,但在 Hello, JavaScript!
中则不会找到。
alert( "Hello, Java!".match(/\bJava\b/) ); // Java
alert( "Hello, JavaScript!".match(/\bJava\b/) ); // null
在字符串 Hello, Java!
中,以下位置对应于 \b
因此,它匹配模式 \bHello\b
,因为
- 在字符串开头匹配第一个测试
\b
。 - 然后匹配单词
Hello
。 - 然后测试
\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 (no match)
alert( "Hello, Java!".match(/\bJava!\b/) ); // null (no match)
我们可以不仅对单词使用 \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
(或数字或下划线),因此该测试不适用于其他字符,例如西里尔字母或象形文字。
评论
<code>
标签,对于多行代码,请将其包装在<pre>
标签中,对于超过 10 行的代码,请使用沙箱(plnkr,jsbin,codepen…)