专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » asp正则表达式函数:Javascript 字符串字节长度计算函数代码和效率分析(for VS 正则) »正文

asp正则表达式函数:Javascript 字符串字节长度计算函数代码和效率分析(for VS 正则)

来源: 发布时间:星期五, 2009年12月11日 浏览:229次 评论:0
先看看下两段代码吧它们分别用for循环和正则表达式来检测字节长度:
for循环检测字节长度思路方法:
复制代码 代码如下:

var lenFor = function(str){
var Len=0,len=str.length;
(str){
for(var i=0; i<len; i){
(str.charCodeAt(i)>255){
Len 2;
}
{
Len;
}
}
Len;
}
{
0;
}
}


使用思路方法
var strlength=lenFor(str)
for循环检测字节长度思路方法 2:
复制代码 代码如下:

function LEN(str){
var i,sum=0;
for(i=0;i<str.length;i){
((str.charCodeAt(i)>=0) && (str.charCodeAt(i)<=255))
sum=sum+1;

sum=sum+2;
}
sum;
}


正则表达式检测字节长度思路方法 3:
有点代码比较精简根据下面测试效率却不高大家可以用上面
复制代码 代码如下:

var lenReg = function(str){
str.replace(/[^\x00-\xFF]/g,'**').length;
};


var strlength2=lenReg(str)
我用以下代码段对以上两个进行测试主要是测试其运行时间:
复制代码 代码如下:

var s = '......';//个很长这里不罗列
function a{
var timeStart,timeEnd;
timeStart = Date;
var s1 = lenReg(s);
timeEnd = Date;
var t1 = (timeEnd - timeStart)*1000;
timeStart = Date;
var s2 = lenFor(s);
timeEnd = Date;
var t2 = (timeEnd - timeStart)*1000;
alert('lenReg: ' + s1 + ' time: ' + t1 + '\nlenFor: ' + s2 + ' time: ' + t2);
}
window.onload = function{
a;
};


以上代码在浏览器载入完毕时候弹出个警示窗口窗口上有两行信息:第行是用正则表达式检测串字节长度和所用时间(×1000);第 2行是用for循环检测串字节长度和所用时间(×1000)

我得到两种答案:
种:
lenReg: 25824 time: 20000
lenFor: 25824 time: 10000
第 2种:
lenReg: 48795 time: 15000
lenFor: 48795 time: 25000
需要介绍说明两次测试所用串为同
为什么会相差那么大呢?我到底偷偷改了什么??以上我提过“中文占用2个字节(和编码有关)”(本文第 3段)中文占用多少个字节是和编码有关般情况下GB-2312和UTF-8编码中中文占用2个字节但是在iso-8859-1编码中中文占用5个字节
问题就在于文档编码以上第种情况编码为:char=UTF-8第 2种情况编码为char=iso-8859-1

在中文网页中我们般都不会用char=iso-8859-1进行编码(中文乱码)而是用char=UTF-8或GB-2312进行编码问题就在这里比较下以上种情况吧:
lenReg: 25824 time: 20000
lenFor: 25824 time: 10000
如上所示用正则表达式检测所用时间竟然是for循环两倍!!!!(其实测试多次的后也不全部都是两倍但大部分测试都是两倍)
为什么呢?
str.replace(/[^\x00-\xFF]/g,'**').length;
看看以上语句(lenReg语句)就我个人理解问题就出现在这里——replace时候要遍历length时候又要遍历所以整个运算过程需要遍历两次而for循环只需要遍历次——这应该就是问题所在了但是我不是非常确定
我不太确定以上理解是否确切但是从表面上分析应该是这样
那么用正则表达式检测真使算法更加复杂吗?还是以上没有充分利用正则表达式优势?现在我还没有意义想法需要进步去推敲先保持着怀疑吧^_^……
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: