首页 > 正则表达式 /\B/ 的含义?

正则表达式 /\B/ 的含义?

var text = "this is a former browser!";
console.log(text.match(/\B.s/g)); //["is", "ws"]

上面这个例子,究竟为什么会输出这个结果?\B 的含义究竟是什么?

“\B 匹配非单词边界。”这句话怎么理解?请举例说明,谢谢。


你可以理解为在你给出的正则表达式中,\B匹配了一个位置,这个位置表示不为单词边界的位置。


例子:

var str = "he is writting css",
    pattn_1 = "/\B.s/g",
    pattn_2 = "/.s/g";
pattn_1.exec(str);    //result:["ss"]
pattn_2.exec(str);    //result:["is"]
这样好看点,你的例子得出的is是this单词的is部分。

首先要理解什么是正则中的“单词”。正则中的单词即可以用 \w 匹配的字符,javascript 中是 [a-zA-Z0-9_],也就是字母、数字和下划线,和变量名允许的字符相同。反之,\W 匹配的字符不是单词,除了空白字符以外,还包括各种标定符号。

然后理解什么是“单词边界”,单词边界 \b 意味着单词 \w 和非单词 \W、字符串首尾、多行模式下的行首行尾的中间位置,例如 "hello world!" 的单词边界包括 "h" 的左边、"o " 的中间、" w" 的中间、"d!" 的中间。

最后,除了单词边界以外的位置就是“非单词边界” \B,包括单词和单词的中间,以及非单词和非单词、字符串首尾、多行模式下的行首行尾的中间。例如 "hello world!" 的非单词边界包括 "he" 的中间、"el" 的中间……"ld" 的中间以及 "!" 的右边。


单词边界是一个虚拟的存在,指代的是词与单词分隔符(通常是空白字符)之间的位置,非单词边界就是没有与单词分隔符相邻的位置
例如
hello world
第一个o和后面的空格之间就是单词边界,第二个o则没有与单词边界相连
o\b可以匹配第一个o,因为它相邻着一个单词边界
o\B可以匹配第二个o,因为它没有相邻单词边界(隔了一个h)

你的例子中的\B.s,也就是匹配第一个this中的is和browser中的ws了,中间的is不会被匹配,因为i前面是一个单词边界

感谢 @eph 提出的关于单词边界的指正

最后上两张 https://regex101.com/ 截的图,足够形象说明问题

\b,注意虚线就是\b匹配的位置

\B,同样注意虚线就是\B匹配的位置

【热门文章】
【热门文章】