用正则改变字符串的处理速度。
1
function getInterceptedStr(sSource, iLen){
2
var d=new Date();
3
if(getStrActualLen(sSource) <= iLen){
4
return sSource;
5
}
6
var ELIDED = "
";
7
var str = "";
8
var l = 0;
9
var schar;
10
for(var i=0; schar=sSource.charAt(i); i++){
11
str += schar;
12
l += (schar.match(/[^\x00-\xff]/) != null ? 2 : 1);
13
if(l >= iLen - ELIDED.length){
14
break;
15
}
16
}
17
str += ELIDED;
18
(alert)(new Date()-d+"ms")
19
return str;
20
}
以上是网易相册的一个字符串取定长的函数。
function getInterceptedStr(sSource, iLen){2
var d=new Date();3
if(getStrActualLen(sSource) <= iLen){4
return sSource;5
}6
var ELIDED = "
";7
var str = "";8
var l = 0;9
var schar;10
for(var i=0; schar=sSource.charAt(i); i++){11
str += schar;12
l += (schar.match(/[^\x00-\xff]/) != null ? 2 : 1);13
if(l >= iLen - ELIDED.length){14
break;15
}16
}17
str += ELIDED;18
(alert)(new Date()-d+"ms")19
return str;20
}以下是我修改的
function getInterceptedStr1(sSource,iLen)
{
var d=new Date();
var el="
",hzlen;
var re=new RegExp("^(.{"+(iLen)+"}).*$","i")
try{hzlen=sSource.replace(re,"$1").match(/[^\x00-\xff]/g).length}catch(e){hzlen=0;}
if(sSource.length+hzlen<=iLen)return sSource;
re.compile("^(.{"+(iLen-Math.ceil(hzlen/2))+"}).*$","i")
alert(new Date()-d+"ms")
return sSource.replace(re,"$1").slice(0,iLen-3)+el;
}测试2个函数速度变化。
演示2个函数

浙公网安备 33010602011771号