前言:好久不见,博客园。

最近在学习研究regex,其中有个特迷惑自己的知识点是分隔符 ( word boundary) [\b] (注:为了方便,后文都以[]来包含字符,并不是reg规则里面的[] ),后面查询咨询了解,明白了,记录下来,希望帮到恰好迷惑的你。

[\b] 官方解释是:Match a word boundary,匹配一个单词边界,也就是单词和空格之间的位置,它本身不匹配任何字符。一般它有三种情况,如下:

  1. 在一个 \w 字符之前,eg:  \bend
  2. 在一个 \w 字符之后,eg: end\b
  3. 在两个字符之间 ;

情况1,2都比较容易理解,这里就略过,主要从第3种情况来讲讲理解。

最开始从网上看到这样一句话:“如果需要更精确的说法,[\b] 匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在) [\w] (匹配字母或数字或下划线或汉字)”;

那做个试验:

    var reg = /end\band/g;
var string = 'wenkend,end,and,endend';
alert( reg.test(string) ) ; //false

根据上述理解 [\b] 要求它分隔的是一边是 [\w] , 一边是非 [\w]。我最开始理所当然的理解为正则表达式 [ end\band ] 匹配字符串 [end,and]  end的右边是分隔符 [,]  ,符合匹配,and的左边是分隔符 [,] , 符合匹配。那么它就应该符合匹配,可是为什么结果是 false 呢?

后面发现自己大错特错。

正确理解如下分三步来理解:

-----------------
/end\band/g, "end,and" (匹配end,true)
| |
----------------- /end\band/g, "end,and" (匹配end后面是否有分隔符,有[,] - true)
| |
------------------ /end\band/g, "end,and" (now,接下来匹配的是否是字符and,因为 [\b]只是匹配匹配一个位置,本身并不匹配任何字符,所以
                                 等待匹配的字符串应该是 [,and] ,而不是[and],显而易见,[,and] 并不符合匹配规则 [and] - false)

总结来说就是:[end\band] 或者其他类似这样的正则表达式是没有意义的,可以说永远也不会存在的。

如果 [\b] 在中间,regex表达式写法必须遵循在 [\b] 的左右两侧一个是[\w],一个是非 [\w],例如 [end\,] .

如有错误或疑问或建议,请指正,谢谢~

如何正确理解正则表达式中的分隔符 \b的更多相关文章

  1. 2.如何正确理解古典概率中的条件概率《zobol的考研概率论教程》

    写本文主要是帮助粉丝理解考研中的古典概率-条件概率的具体定义. "B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约 ...

  2. 正确理解JavaScript中的this关键字

    JavaScript有this关键字,this跟JavaScript的执行上下文密切相关,很多前端开发工程师至今对this关键字还是模棱两可,本文将结合代码讲解下JavaScript的this关键字. ...

  3. (转载)新手如何正确理解GitHub中“PR(pull request)”中的意思

    我从知乎看到的两个答案,分别从实际意义以及语言学角度告诉你改怎么理解PR,很简洁,这个理解非常棒,会解决新手刚看到PR(pull request)这个词时的困惑.   实际意义:   有一个仓库,叫R ...

  4. 正确理解MySQL中的where和having的区别

    原文:https://blog.csdn.net/yexudengzhidao/article/details/54924471 以前在学校里学习过SQLserver数据库,发现学习的都是皮毛,今天以 ...

  5. 如何正确理解古典概率中的条件概率 《考研概率论学习之我见》 -by zobol

    "B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约束条件下,A发生的概率变化为?" "B事件中 ...

  6. 正确理解WPF中的TemplatedParent

    (注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树,由于名称不是很统一,文中统一用英文名称代表两个概念,况且VisualTreeHelper和Logical ...

  7. 正确理解WPF中的TemplatedParent (转贴)

    http://blog.csdn.net/idebian/article/details/8761388 (注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树 ...

  8. 正确理解python中的赋值语句:a, b = b, a + b

    赋值语句: a, b = b, a + b 相当于: t = (b, a + b) # t是一个tuple a = t[0] b = t[1] 但不必显式写出临时变量t就可以赋值.

  9. javascript中正则表达式中的 match,exec,test,replace 之我理解

    这个正则 ($&) 的语法: https://msdn.microsoft.com/library/3k9c4a32(v=vs.94).aspx 在ECMAScript中对这几个的说明: ma ...

随机推荐

  1. SecureCRT 绝佳配色方案

    终端有一个好的配色,不仅能保护自己的眼睛,也能给人一个好心情,本配色方案适合任意一种SSH客户端软件. 设置背景颜色 Options => Sessions options => Term ...

  2. IE下全局对象报 脚本错误提示“对象不支持此属性或方法”解决方案

    原来是IE会把页面中的元素id可以直接当变量名一样使用,但是这个id变量不能被赋值. 例如: <body id='body'> <script type="text/jav ...

  3. 关于常用meta的总结

    入行也半年了,无数次的想过写博客也无数次的想过第一篇会写什么,一直没有落实.今天心血来潮把博客开了,那就写点东西吧.第一篇就写一写看似简单但又经常不注意到的meta标签吧.(博主经验尚浅,有许多理解不 ...

  4. 用于Lucene的各中文分词比较

    对几种中文分析器,从分词准确性和效率两方面进行比较.分析器依次为:StandardAnalyzer.ChineseAnalyzer.CJKAnalyzer.IK_CAnalyzer.MIK_CAnal ...

  5. 实现Jquery触发一事件后,停留5秒,再接着触发下面的事件

    这里是一个广告位的Jquery的代码,有两个不同的广告位,一个是中间浮动显示的,显示5秒后自动消失,并限定每天仅出现一次(Cookie实现): //=====================广告位的j ...

  6. codevs1145

    题目描述                     Description 给定A.B.C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆 ...

  7. VS2013关于“当前不会命中断点源代码与原始版本不同”的BUG

    文件明明没有动过,竟然一直给我这种提示! 解决方法:将出问题的文件用notepad打开,然后另存为Unicode编码,覆盖原来的文件. 网上另外有一种办法是:通过重新格式化出问题的源文件亦可以解决,即 ...

  8. C语言的ELF文件格式学习

    最近的lab里面有ELF文件相关的,所以成这个几乎,学点ELF的东西. ELF,是一种文件格式.暂时,只看可执行文件的ELF文件格式. 首先,给出文件的格式的布局图: 光看这个很难理解,所以写一个小的 ...

  9. Linux下 静态链接库 和 动态链接库

    先来说说C/C++编译过程 编译: 检查语句符号定义,将C/C++代码翻译生成中间语言. 链接: 将中间代码整合,生成可执行的二进制代码. 简单的说,库文件都是一种特殊的中间语言文件,静态库还是一种特 ...

  10. MySQL的联结(Join)语法

    MySQL的联结(Join)语法 1.内联结.外联结.左联结.右联结的含义及区别:   在讲MySQL的Join语法前还是先回顾一下联结的语法,呵呵,其实连我自己都忘得差不多了,那就大家一起温习吧(如 ...