正则"\b" 查找字符边距关于连字符的问题

大家都知道在我们前端的项目中会经常运用到“-”连字符去定义一个class,正是这个习惯一直困扰了我很久昨天下班了因为没事翻出这个问题很幸运的找到了相关资料和解决问题,首先我


描述下问题:


1、是用“\b+word+\b”去匹配一个单词的时候word肯定是没问题的,但是如果去匹配“word-glod”这个时候会发现也能匹配,其实我们的初衷却是仅仅只是想匹配“word”所以问题就是这样的。


问题原因:


1、“\b”其实找的是边界大家都知道,不过究竟什么才算边界? 通常情况下,以 空格、段落首行、段落末尾、逗号、句号 等符号作为边界,但是值得注意的是,分隔符“-”也可以作为边界,从“-”的字面意思:分隔符,大致就可以想到了。实际上,在英语中,它是用来做单词分隔的。所以,在查找的时候看到“-”的时候,会把它视为一个空格“ ” ,而看到下划线“_”的时候,会把它视为空字符“” (搜索引擎查找也会这样因此对于关键字很多人会用连字符而不是下划线);


资料来源:http://www.cnblogs.com/newtekboy/archive/2011/09/19/2181950.html


解决办法:


1、就是直接去匹配“\b+word+\b”同时给他增加个条件去判断传入值中的"-"和我们要查找元素的中的"-"的位置是否有个相同位置,这个方法有点粗糙如果有更好的解决办法希望提出来分享


关于这个问题的详细事例大家可以看看我在蓝色理想发的一篇文章:http://bbs.blueidea.com/thread-3050278-1-1.html(PS:这文章标题真的让我很尴尬)


PS:对于这个问题,补充下,昨天在应用我写的这个东西时候突然发现这个匹配还是不够完善,因为对于如果出现多个连字符的class却是有问题的(出现多个连字符的时候它们中连字符的位置是第一个是一样的所以也就默认匹配上了),其实回过头来想想这个也是我把问题给复杂化了,因为查找class现在比较通用的是split分割然后在将分割后的数组拿出来和传入的值一一匹配,开始我觉得这样分割成数组在循环一一匹配效率不高,才衍生出正则这样去找的想法,不过走到了一个死胡同,其实后来想想一个元素里面class能有多少最多也就10个,那样分割成熟组在匹配耗损的效率和所耗费的时间已经不正正比了。(不过任然希望有精通正则的高手帮我解决这个问题)



你可能感兴趣的:(搜索引擎,Class)