讲了这么多,还漏掉了一个重要的内容:究竟什么才算边界?
通常情况下,以 空格、段落首行、段落末尾、逗号、句号 等符号作为边界,值得注意的是,分隔符“-”也可以作为边界。
正则如下:
\bmagic\b
效果演示
本例代码
function reg_replace()
{
var test = document.getElementById("test");
var regex = /\b(magic)\b/g;
test.innerHTML = test.innerHTML.replace(regex,"<span style='background-color:orange'>$1</span>");
}
这是什么原因呢?其实很好理解,从“-”的字面意思:分隔符,大致就可以想到了。实际上,在英语中,它是用来做单词分隔的。
这里有个重要的搜索引擎优化常识,大家注意到本文档的命名,我采用的是:Regular-Expression-Tutorial.pdf,为什么不用下划线分隔,命名成Regular_Expression_Tutorial.pdf 呢? 因为当搜索引擎看到“-”的时候,会把它视为一个空格“ ”,而看到下划线“_”的时候,会把它视为空字符“”,实际上,下划线的正确叫法是“连字符”。于是,当我命名为 Regular-Expression-Tutorial.pdf 时,搜索引擎看到的是: Regular Expression Tutorial.pdf,而当我命名成 Regular_Expression_Tutorial.pdf 时,搜索引擎看作 RegularExpressionTutorial.pdf 。
可以看出,正则表达式在字符边界问题上 对“-”的处理方式 与 搜索引擎相同。
边界的相对性:
- 当你对一个普通字符,比如“s”,设定边界的时候,它的边界是诸如空格、分隔符、逗号、句号等。
- 当你对一个边界,比如分隔符“-”或者“,”等,设定边界的时候,它的边界是普通字符。
正则如下:
\b(,)\b
效果演示
与上面唯一不同的是:这次我们匹配逗号“,”,而它本身也是一个边界,结果与上面完全相反。可见,对于“,”而言,它的边界是一个普通字母。
边界的相对性是很重要的,因为我们很多时候需要匹配诸如“<”这样的字符。