如何正确理解正则表达式中的分隔符 \b
2016-11-01 15:31
330 查看
前言:好久不见,博客园。
最近在学习研究regex,其中有个特迷惑自己的知识点是分隔符 ( word boundary) [\b] (注:为了方便,后文都以[]来包含字符,并不是reg规则里面的[] ),后面查询咨询了解,明白了,记录下来,希望帮到恰好迷惑的你。
[\b] 官方解释是:Match a word boundary,匹配一个单词边界,也就是单词和空格之间的位置,它本身不匹配任何字符。一般它有三种情况,如下:
在一个 \w 字符之前,eg: \bend
在一个 \w 字符之后,eg: end\b
在两个字符之间 ;
情况1,2都比较容易理解,这里就略过,主要从第3种情况来讲讲理解。
最开始从网上看到这样一句话:“如果需要更精确的说法,[\b] 匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是或不存在) [\w] (匹配字母或数字或下划线或汉字)”;
那做个试验:
根据上述理解 [\b] 要求它分隔的是一边是 [\w] , 一边是非 [\w]。我最开始理所当然的理解为正则表达式 [ end\band ] 匹配字符串 [end,and] end的右边是分隔符 [,] ,符合匹配,and的左边是分隔符 [,] , 符合匹配。那么它就应该符合匹配,可是为什么结果是 false 呢?
后面发现自己大错特错。
正确理解如下分三步来理解:
总结来说就是:[end\band] 或者其他类似这样的正则表达式是没有意义的,可以说永远也不会存在的。
如果 [\b] 在中间,regex表达式写法必须遵循在 [\b] 的左右两侧一个是[\w],一个是非 [\w],例如 [end\,] .
如有错误或疑问或建议,请指正,谢谢~
最近在学习研究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\,] .
如有错误或疑问或建议,请指正,谢谢~
相关文章推荐
- 如何在html的javascript中写函数function()并用正则表达式验证身份证号码与邮箱格式是否正确
- 如何理解正则表达式匹配过程
- 如何理解正则表达式
- 如何理解PHP正则表达式中$1、$2、$3......
- python中如何正确使用正则表达式的详细模式(Verbose mode expression)
- 如何正确使用带有"g"标记的javascript正则表达式
- 编写高质量的js之正确理解正则表达式回溯
- 正则表达式「^」符号的正确理解方式
- IOS 如何正确使用正则表达式
- 正则表达式问题:如何理解/href\s*=\s*(?:"(?<1>[^"]*)"|(?<1>\S+))/(转载)
- 如何正确书写java正则表达式
- 如何正确理解PHP的错误信息
- 专家教您如何在C语言中巧用正则表达式
- 用javascript 的正则表达式来验证Email地址是否格式正确!
- 如何正确理解PHP的错误信息
- 如何正确理解企业文化
- 我看了这些明白了如何使用正则表达式,希望对你也有帮助
- C#中如何使用正则表达式
- [转帖]C#如何使用正则表达式来校验字段串输入的系列函数
- 如何在Delphi中使用正则表达式