如何用正则表达式定位JS代码中尾部有多余逗号的对象?

转载:http://epy.iteye.com/blog/460029

 昨天跟同事一起检查IE下的JS错误,搞了几个小时,考虑了很多种可能,最后偶然发现问题的根源在于ContactList.js载入了ContactDisplay.js,而ContactDisplay.js中在postCreate函数里有这样一段代码 
dojo.create("img", { 
   src: "/html/themes/classic/images/contacts_pending.png", 
}, this.pendingImg); 
其中作为第二个参数的对象中多了一个逗号。 

    这样的问题其实并不少见,对于比较简单的代码,比如: 
var tt={ 
   name:"test", 
   ff:"fdff”, 
}; 
   Eclipse的JavaScript Editor会给出错误提示”Syntax error on token ",", LiteralField expected after this token”;当代码比较复杂,嵌套层次比较多时,如前面ContactDisplay.js中的情况,Eclipse的JavaScript Editor就没有给出提示。 

    好在Eclipse中有用正则表达式进行搜索的功能,今天上午研究了一下,写了正则表达式来定位JS代码中尾部有多余逗号的对象。 
    先介绍几个匹配注释的正则表达式: 
用于匹配JS中的行注释: //[^\n]*\n 
用于匹配JS中的块注释: /\*(.|\n)*?\*/ 
用于匹配JS中的任意注释: (//[^\n]*\n)|(/\*(.|\n)*?\*/) 

     要匹配JS中尾部有多余逗号的对象,可用正则表达式: 
          ,((\s*)|(//[^\n]*\n)|(/\*(.|\n)*?\*/))*}      
其中考虑了’,’和’}’之间有空白字符、行注释和块注释的情况。在Eclipse中用上面的正则表达式对较小的文件进行搜索是可以的,但对较长的文件搜索时,可能会报告"Find pattern too complex",非常郁闷。 

    下面是几种稍微简单的情况, 
只考虑,和}之间有空白字符的情况: ,\s*} 
只考虑,和}之间有空白字符和行注释的情况: ,((\s*)|(//[^\n]*\n))*} 
只考虑,和}之间有空白字符和块注释的情况: ,((\s*)|(/\*(.|\n)*?\*/))*} 

    一种可行的解决方法是:先把JS中的块注释清除(用正则表达式替换功能将/\*(.|\n)*?\*/替换为空),然后只考虑,和}之间有空白字符和行注释的情况,即用 ,((\s*)|(//[^\n]*\n))*}  进行查找。 

    对于有些JS在FF中正常运行,在IE下有错误的情况,如果JS文件比较长,用肉眼找起来很费事,并且怀疑是哪个对象多了个逗号的缘故,不妨在Eclipse打开源文件,用上面的方法搜搜看,也许能有意外发现哦。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值