如何正确理解正则表达式中的分隔符 \b
前言:好久不见,博客园。
最近在学习研究regex,其中有个特迷惑自己的知识点是分隔符 ( word boundary) [\b] (注:为了方便,后文都以[]来包含字符,并不是reg规则里面的[] ),后面查询咨询了解,明白了,记录下来,希望帮到恰好迷惑的你。
[\b] 官方解释是:Match a word boundary,匹配一个单词边界,也就是单词和空格之间的位置,它本身不匹配任何字符。一般它有三种情况,如下:
- 在一个 \w 字符之前,eg: \bend
- 在一个 \w 字符之后,eg: end\b
- 在两个字符之间 ;
情况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的更多相关文章
- 2.如何正确理解古典概率中的条件概率《zobol的考研概率论教程》
写本文主要是帮助粉丝理解考研中的古典概率-条件概率的具体定义. "B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约 ...
- 正确理解JavaScript中的this关键字
JavaScript有this关键字,this跟JavaScript的执行上下文密切相关,很多前端开发工程师至今对this关键字还是模棱两可,本文将结合代码讲解下JavaScript的this关键字. ...
- (转载)新手如何正确理解GitHub中“PR(pull request)”中的意思
我从知乎看到的两个答案,分别从实际意义以及语言学角度告诉你改怎么理解PR,很简洁,这个理解非常棒,会解决新手刚看到PR(pull request)这个词时的困惑. 实际意义: 有一个仓库,叫R ...
- 正确理解MySQL中的where和having的区别
原文:https://blog.csdn.net/yexudengzhidao/article/details/54924471 以前在学校里学习过SQLserver数据库,发现学习的都是皮毛,今天以 ...
- 如何正确理解古典概率中的条件概率 《考研概率论学习之我见》 -by zobol
"B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约束条件下,A发生的概率变化为?" "B事件中 ...
- 正确理解WPF中的TemplatedParent
(注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树,由于名称不是很统一,文中统一用英文名称代表两个概念,况且VisualTreeHelper和Logical ...
- 正确理解WPF中的TemplatedParent (转贴)
http://blog.csdn.net/idebian/article/details/8761388 (注:Logical Tree中文称为逻辑树,Visual Tree中文称为可视化树或者视觉树 ...
- 正确理解python中的赋值语句:a, b = b, a + b
赋值语句: a, b = b, a + b 相当于: t = (b, a + b) # t是一个tuple a = t[0] b = t[1] 但不必显式写出临时变量t就可以赋值.
- javascript中正则表达式中的 match,exec,test,replace 之我理解
这个正则 ($&) 的语法: https://msdn.microsoft.com/library/3k9c4a32(v=vs.94).aspx 在ECMAScript中对这几个的说明: ma ...
随机推荐
- javascript中的同源策略
如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就是属于同一个源 览器有一个很重要的概念——同源策略(Same-Origin Policy).所谓同源是指,域名 ...
- 什么是HTTP Keep-Alive呢?
在通过调试工具查看网络请求的时候,通常在response header能看到类似下面这种:Keep-Alive: timeout=10, max=94 .那么Keep-Alive到底是什么呢? HTT ...
- Android Service 系统服务
android sdk 提供很多公用的服务,也就是系统服务,开发者可以通过Activity类的getSystemService方法获取指定的服务.系统服务包含音频服务.视频服务窗口服务等.本篇主要讲T ...
- jsoup 解析html 页面数据
我html 页面元素: /html/body/table[2]/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/font/html/body/table[2]/tbody ...
- zoj1183 Scheduling Lectures
这道题题意不想说了,跑了640ms,感觉水过去了,应该能通过单调队列优化,很长时间没碰已经不知道怎么写了,就说说现在的写法吧. 状态定义很关键:dp[i][j]把前j个topic放在前i堂课. 因为这 ...
- Lazy evaluation
是一段源码,关于Lazy evaluation的,看了很久才懂,记录一下 一,lazy方法返回的比较复杂,一层一层将其剥开. wraps(func)跳转到curry(update_wrapper, f ...
- VB中后台打开Excel文件实现代码
某些时候需要打开Excel文件来获取或者写入数据,但又不希望跳出打开的Excel文件窗口,可以用下面的代码: Dim eb As New excel.Application, wb as excel. ...
- linux 生产环境搭建
Linux基础命令杂记 今天又一次搞Linux生产环境搭建.这是种步骤很多,很繁琐而且又不得不做的事情.虽然做过很多次,但还是有很多步骤.命令不记得,每一次到处找资料很麻烦,于是将一些步骤记下,以 ...
- python--执行文件的绝对路径
1.__file__属性对应文件名. 2.os.path.realpath(__file__)这样就可以得到文件的绝对路径.
- jQuery插入节点的方法
注:摘自<锋利的jQuery(第二版)> append() 向每个匹配的元素内部追加内容: HTML代码:<p>我想说:</p>jQuery代码:$(" ...