javascript正則表達式 "\b"问题
preface
昨晚在看《javascript权威指南》后。看见作者自己封装一个兼容全部浏览器的山寨HTML5新API classLIst类。自己想了想认为自己也要去玩一下。可是能力还是有限。所以就遇见一个正則表達式的bug。确实自己对正則表達式有兴趣可是掌握不是非常好。
困扰了一段时间,早上在stack overflow站点中找到了答案。
issue description
首先我创建一个类叫CSSClassList
- CSSClassList = function(el){
- this.el = typeof el=="object"?
el:document.getElementById(el);
- }
然后就在CSSClassList原型中加入方法。我模仿classList类中的contains(check if an element's list of classes contains a specific class),这种方法是用来检查该元素有没包括指定的类选择器。
- CSSClassList.prototype.contains = function(cls) {
- var classname = this.el.className, reg = new RegExp("\b" + cls + "\b");
- return reg.test(classname);
- }
然后就出问题。你能够试一下。我就不想贴出我的HTML和CSS了,问题就在于你要查询的元素用contains測是否包括指定类选择器都是为false的,不管该元素是否包括。为什么呢?昨天晚上就在这里栽了。
debug
我把我的目标放在正則表達式上,我在想是不是我的正則表達式写错了
- 1 在contains方法中console.log出reg
- 结果:比方我传给contains函数的实參是为"font",那么console.log出来的是/font/
- 心里活动: 看到这个答案我就郁闷下,这样子应该是能够匹配的到的呀
- 2 在contains方法中return后面的reg改成/font/,就变成了/font/.test(classname)
- 结果:返回的是true
- 心里活动:什么情况,奇葩javascript你在干什么啊!。心中更加郁闷
- 3 在contains方法中的new RegExp("\b" + cls + "\b")改成new RegExp(cls)
- 结果:返回的是true
- 心里活动:啊!好像找到问题所在了,是字符串中的\b问题
- 4 用google搜索stackoverflow相关问题
- 结果:Javascript RegExp and boundaries
- 心里活动:总算让我知道原因所在了。
summary
- "\b"
- 这个在javascript解析器中它会解释为退格键。我们知道退格键的ASCII码是8。
我们能够这样子来測试下:
- "\b".charCodeAt(0) == 8 结果是为true
- "\\b"
- \是用来阻止javascript解析器把"\b"解析成退格键,能够用相同的方法来測试下
- "\\b".length "\\b".charCodeAt(0) "\\b".chatCodeAt(1)分别为2 92 98
- new RegExp("\\b"+cls+"\\b")
- 用console.log打印出来是,假如我的cls为"font",打印结果为"\bfont\b"。而之前那个new RegExp("\b"+cls+"\b")打印出来的是"(退格键)font(退格键)",可是在这个单词左右还有两个退格键,所以我匹配不了"font"。这个是本文的重点
last
- CSSClassList.prototype.contains = function(cls) {
- var classname = this.el.className, reg = new RegExp("\\b" + cls + "\\b");
- return reg.test(classname);
- }
reference
javascript正則表達式 "\b"问题的更多相关文章
- javascript 正則表達式补充
定义 JavaScript种正則表達式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...
- JavaScript正則表達式知识汇总
Js 正則表達式知识汇总 正則表達式: 1.什么是RegExp?RegExp是正則表達式的缩写.RegExp 对象用于规定在文本中检索的内容. 2.定义RegExp:var +变量名=new RegE ...
- DOM笔记(十):JavaScript正則表達式
一.RegExp ECMAScript通过RegExp类型类支持正則表達式,语法和Perl类似: var exp = /pattern/flags; patternb部分是不论什么简单的或复杂的正則表 ...
- JavaScript 正則表達式
一.简单介绍 1.什么是正則表達式 正則表達式本身就是一种语言,这在其他语言是通用的. 正則表達式(regular expression)描写叙述了一种字符串匹配的模式,能够用来检查一个串是否含有某种 ...
- 经常使用的正則表達式归纳—JavaScript正則表達式
来源:http://www.ido321.com/856.html 1.正则优先级 首先看一下正則表達式的优先级,下表从最高优先级到最低优先级列出各种正則表達式操作符的优先权顺序: 2.经常使用的正則 ...
- javascript——正則表達式
正則表達式(RegExp对象):主要用于表单验证 1.创建正則表達式: (1).var ret = /pattern/; pattern是内容.能够是正則表達式的内容,能够是字符或是其它的内容 (2) ...
- javascript正則表達式
定义一个正則表達式 能够用字面量 var regex = /xyz/; var regex = /xyz/i; 也能够用构造函数 var regex = new RegExp('xyz'); var ...
- JavaScript使用正則表達式
2.0 简单介绍 正則表達式是能够用来查找与给定模式匹配的文本的搜索模式.比如,在上一章中,我们在一个较长的字符串中查找子字符串Cookbook: var testValue = "This ...
- js正則表達式语法
1. 正則表達式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之同样的 ...
随机推荐
- 浙江大学PAT上机题解析之5-05. QQ帐户的申请与登陆
实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式说明: 输入首先给出一个正整数N(<=105),随后给出N行指令.每行指令的格式为:“命令符 ...
- Activity具体解释(生命周期、以各种方式启动Activity、状态保存,全然退出等)
一.什么是Activity? 简单的说:Activity就是布满整个窗体或者悬浮于其它窗体上的交互界面.在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一个主的Ac ...
- ORACLE基本SQL语句-查询篇
一.普通查询 /*查询表数据*/select * from STU /*取出前3行数据*/select * from stu where ROWNUM<=3 /*模糊查询*/select * f ...
- osg添加纹理示例
转自http://www.cnblogs.com/ylwn817/articles/1976851.html #include <osgDB/ReadFile>#include <o ...
- javascript一些常用函数
1.indexof 方法可返回某个指定的字符串值在字符串中首次出现的位置. 注释:indexOf() 方法对大小写敏感! 如果要检索的字符串值没有出现,则该方法返回 -1. 例 : 在本例中,我们将 ...
- xcode5.1上真机调试报告No architectures to compile for...的解决办法
由于手头上只有一台IPAD一代,近期升级到IOS5.0了(人家apple只让升级到此为止)而开发环境Xcode版本是5.1,默认情况下XCode编译出来的代码最低能跑在IOS6.0下, 于是GOOGL ...
- 文成小盆友python-num5 -装饰器回顾,模块,字符串格式化
一.装饰器回顾与补充 单层装饰器: 如上篇文章所讲单层装饰器指一个函数用一个装饰器来装饰,即在函数执行前或者执行后用于添加相应的操作(如判断某个条件是否满足). 具体请见如下: 单层装饰器 双层装饰器 ...
- 职员时序安排lingo求解
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang !职员时序安排模型 题目: 一项工作一周七天都需要有人,每天所需的最少职工数为20,16,13,1 ...
- Android调用系统的Activity、ContentProvider、Service、Broadcast Receiver
Intent-------->Action |_____________Activity------------------------------->Intent Action |___ ...
- SQL Fetch size
JDBC performance tuning with optimal fetch size February 1, 2009 31 Comments Tuning performance usin ...