Firefox下正则诡异问题
作者:潇洒 来源:潇洒blog 时间:2009-08-03 14:03:00
第二次遇到FF下正则兼容性问题( 第一次是关于"g"全局标志的,现在网上已有很多相关文章介绍)。
以下正则在FF和IE下的结果不一样,很是奇怪,目前还没找到原因和解决方案。希望有高手指点一下。谢谢!
<script type="text/javascript" >
var re = /^(?:([a-z])|([A-Z])|([0-9])){5,}|(.)+$/;
alert('abcdeFGHIJ12345'.replace(re, '$1$2$3'));
alert('ab1F'.replace(re, '$1$2$3'));
/*
完整的需求是这样:所有小写,大写,数字。5个以上都替换为1个。5个以下清空。
现在的结果是: 在IE下是正确的: eJ5 , 在FF下是: 5
期望的结果是: 1、在FF下得到同样的结果 2、弄明白为什么会这样
*/
</script>
经过一番偿试,总算(试)出FF和IE都兼容的方案来了~ 可惜暂时还无法解释为什么。
(而且也不知道这个方案是否存在bug- -,高手们,快来看看咯~)
发现bug.....跟上面的正则还是不完全一样。当string里的同类字符小于5个时就不对了。- -!
继续求高手帮忙~
<script type="text/javascript" >
// 在ie和ff下结果一样了
var re = /(?:([a-z]){5,}|([A-Z]){5,}|([0-9]){5,})|(.)/g;
alert('abcdeFGHIJ12345'.replace(re, '$1$2$3'));
alert('ab1F'.replace(re, '$1$2$3'));
// 同类字符小于5个时又不对了
alert('abcFG12'.replace(re, '$1$2$3'));
</script>