"\b":用于匹配一个英文单词的边界。什么是单词的边界?一、字符串的起始和末尾,二、除大小写字母、数字、下划线之外的字符(包括开头结尾、换位符等),也就是"\W"的范围:`[^A-Za-z0-9_]`。但是“\b”本身不匹配这些字符,他只是用于来表示正则表达式中英文单词的边界。
来看下面这个Demo:
const regexp = /\b\w+\b/g;
const text = [
'Make small but daily progress.',
'Make-small-but-daily-progress.',
'Make/small/but/daily/progress.',
'Make每small天but进daily步progress.'
]
text.forEach((textItem) => console.log(textItem.match(regexp)));
// 输出四次同样的返回值:[ 'Make', 'small', 'but', 'daily', 'progress' ]
当使用”\b“去匹配字符串中单词的时候,会得到上述结果。所以看出来划分单词边界的字符不仅仅是空格了,事实上连"-"字符都算做是用来区分单词边界。
但是请注意,不要试图使用"\b"匹配字符串中用来区分英文单词边界的字符,上面说过,因为它并不匹配区分边界的字符。换句话说,当你使用它去匹配一组字符串时,匹配结果的内容将会是一个空的字符串。
const text = 'Hello world!';
const regexp = /\b/g;
console.log(text.match(regexp));
// 输出的结果:[ '', '', '', '' ]
因为区分单词边界的还有行首行尾和起始末尾,所以上述的结果中的两个单词存在四个边界。但记住,"\b"匹配的内容的永远为空。
同时这也意味着,"/\w\b\w/"将不能匹配任何字符串内容,因为在一个单词中间部分,永远也不可能存在一个区分单词边界的字符,否则那样的话就是两个单词了。
文章评论