var text = "this is a former browser!";
console.log(text.match(/\B.s/g)); //["is", "ws"]
上面这个例子,究竟为什么会输出这个结果?\B 的含义究竟是什么?
“\B 匹配非单词边界。”这句话怎么理解?请举例说明,谢谢。
var text = "this is a former browser!";
console.log(text.match(/\B.s/g)); //["is", "ws"]
上面这个例子,究竟为什么会输出这个结果?\B 的含义究竟是什么?
“\B 匹配非单词边界。”这句话怎么理解?请举例说明,谢谢。
首先要理解什么是正则中的“单词”。正则中的单词即可以用 \w
匹配的字符,javascript 中是 [a-zA-Z0-9_]
,也就是字母、数字和下划线,和变量名允许的字符相同。反之,\W
匹配的字符不是单词,除了空白字符以外,还包括各种标定符号。
然后理解什么是“单词边界”,单词边界 \b
意味着单词 \w
和非单词 \W
、字符串首尾、多行模式下的行首行尾的中间位置,例如 "hello world!"
的单词边界包括 "h"
的左边、"o "
的中间、" w"
的中间、"d!"
的中间。
最后,除了单词边界以外的位置就是“非单词边界” \B
,包括单词和单词的中间,以及非单词和非单词、字符串首尾、多行模式下的行首行尾的中间。例如 "hello world!"
的非单词边界包括 "he"
的中间、"el"
的中间……"ld"
的中间以及 "!"
的右边。
例子:
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部分。
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
单词边界是一个虚拟的存在,指代的是词与单词分隔符(通常是空白字符)之间的位置,非单词边界就是没有与单词分隔符相邻的位置
例如
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匹配的位置