2020-10-20 13:51:07 登录注册 RSS

当前位置: 公理网 >> 正义之家 >> 我被正则表达式的单词边界搞糊涂了

我被正则表达式的单词边界搞糊涂了
发布时间:2017-03-10| 来源:公理网 | 点击发表评论
越搞越糊涂了,大家看我的几个例子,再回答一下吧,谢谢!
第一个例子:关于\b的
var str='Who are you? I\'m a boss'
var re=/a\b/g
alert(str.match(re))
// /\ba/g和/a/g这样会匹配出a,a
// /a\b/g和/\ba\b/g会匹配出a,并且这个a是BOSS前面的a
这第一个例子,我没有说错吧?
第二个例子:关于\B的
var str='你是s谁?我s是你老板'
var re=/是\B/g
alert(str.match(re))
// /\B是/g匹配的是第一个是
// /是\B/g匹配的是第二个是
这第二个例子,我也没有说错吧?
犀牛书上说,\b匹配一个单词的边界,简言之,就是位于\w和\W之间的位置,或者位于字符\w和字符串的开头或者结尾之间的位置,而\B匹配的是非单词边界。(于是我区别\b和\B的标准,就是以\W和\w为标准区分的,简单来说,就是匹配非单词的时候,必须以单词作为边界划分,我不知道这句话正确与否,有待你们的考证)
于是,可以得到结论,这个结论我是看菜鸟教程的。\b 字符的位置是非常重要的。如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项。如果它位于字符串的结尾,它在单词的结尾处查找匹配项。其实这句话我似懂非懂。
于是我按照上述的理论,做了下面的实验以验证,结果我糊涂了
var str = "abc_123中文_d3=efg汉字a"; 
var reg = /[\u4e00-\u9fa5]\B/g;
var arr = str.match(reg); 
alert(arr)
弹出的结果是: \B的时候,匹配到'中和汉';’\b的时候匹配到'文和字'。我不是很理解为什么匹配到这个结果,求解?
当把 reg = /[\u4e00-\u9fa5]\B/g改为var reg = /\B[\u4e00-\u9fa5]\B/g的时候,弹出结果为null,按照我的理解,应该会匹配到"汉字"两个字的,所以我彻底糊涂了,求解啊;
说白了,就是不懂单词边界的意思,有没准确又容易理解的方式?
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN用户行为准则,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

最新新闻

手机浏览

公理网 版权所有

公理网 Total 0.029835(s) query 6, 报料QQ:点击这里

给我发消息