注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

FireFox3.6和FireFox4.0对正则表达式的处理不同之处  

2011-09-09 18:49:29|  分类: Firefox |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这几天,处理一个JS正则的Bug时,发现其他浏览器都OK,唯独FireFox3.6,有问题,而且是时而出现,时而不出现。非常的奇怪。
用FireBug debug 和 Google 总算是把这个bug处理掉了。

原因很简单,是FireFox3.6遵循EMCAScript3的标准,而FireFox4遵循的是EMCAScript5的标准。在使用正则表达式创建实例时,在ECMAScript3规范中,用正则表达式创建的RegExp对象会共享同一个实例,而在ECMAScript5中则是两个独立的实例。

所以当我们在使用正则表达式的“g”全局查找时,就会有问题。
首先,要知道正则表达式中“g”的作用:
1.g是全局标志。如果设置了这个标志,对某个文本执行搜索和替换操作时,将对文本中所有匹配的部分起作用。如果不设置这个标志,则仅搜索和替换最早匹配的内容。
2. 如果为正则表达式设置了全局标志(g),可以通过多次调用exec和test方法在字符串中进行连续搜索,每次都是从RegExp对象的lastIndex属性值指定的位置开始搜索字符串。

原因很清楚:就是因为我在我的正则表达里设置了g标志,所以在FireFox3.6第一次匹配成功,第二次从lastIndex开始匹配,所以匹配失败(因为ECMAScript3规范正则表达式共享一个实例,所以它的lastIndex是变化的)。
而在FireFox4中,每一次正则表达式的实例都是新的,所以它的lastIndex总是从0开始的,所以每次都匹配成功。

参考资料:

补充知识:(摘抄自w3school)http://www.w3school.com.cn/js/jsref_obj_regexp.asp

RegExp 对象属性

FF: Firefox, IE: Internet Explorer

属性描述FFIE
globalRegExp 对象是否具有标志 g。14
ignoreCaseRegExp 对象是否具有标志 i。14
lastIndex一个整数,标示开始下一次匹配的字符位置。14
multilineRegExp 对象是否具有标志 m。14
source正则表达式的源文本。14

RegExp 对象方法

FF: Firefox, IE: Internet Explorer

方法描述FFIE
compile编译正则表达式。14
exec检索字符串中指定的值。返回找到的值,并确定其位置。14
test检索字符串中指定的值。返回 true 或 false。14

支持正则表达式的 String 对象的方法

FF: Firefox, IE: Internet Explorer

方法描述FFIE
search检索与正则表达式相匹配的值。14
match找到一个或多个正则表达式的匹配。14
replace替换与正则表达式匹配的子串。14
split把字符串分割为字符串数组。14



  评论这张
 
阅读(388)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017