如题,但是截取字符串有要求:1.将一段长文本截成N段相等的子串。
2.如果是数值,则不截断字值
3.如果截取后的字符串中含回车、换行,则直接从回车换行部份截取
4.如果截取后的子串的下了一个子串是以标点符号开头号,则标点记入上个子串。请高人指点~~谢谢~~
2.如果是数值,则不截断字值
3.如果截取后的字符串中含回车、换行,则直接从回车换行部份截取
4.如果截取后的子串的下了一个子串是以标点符号开头号,则标点记入上个子串。请高人指点~~谢谢~~
1.截取子串时,是数字部分不能分离:如“abc123” === >>不能截成:“abc1”,"23"
2.如果截取的子串中有回车或者换行,只截取至回车或换行符:如“abc\r\nefd"===>截取四个字符时,第一次只取“abc”,第二次“efd”
3.因为长串中是含中文 字符,截取中文字符按二个字符算 。
4.如果截取的子串中,对标点的处理,不能让标点显示的行的首字符,如:“abc,efg”==>截取三个字符时,第一次:“abc,”,第二次efg""不知道我现在描述清楚没有。我试过几次,都没能很好的实现这个业务 ,忘高手指点~~
var perlen = 60;
function splitestring(srcstr){
var result=[];
for(var i=0,j=0,k=0,temp="";i<srcstr.length;i++){
if(srcstr[i]=='\n'||srcstr[i]=='\r'){
j=0;result[k] = temp;temp = "";k++;
}
else if (j==perlen-1) {
temp = temp +srcstr[i];
if(isNum(srcstr[i])){
i++;
while(i<srcstr.length && isNum(srcstr[i])){
temp = temp + srcstr[i];i++;
}
i--;
}
else if(isBiaoDian(srcstr[i+1])){
i++;temp = temp + srcstr[i];
}
j=0;result[k] = temp;temp = "";k++;
}
else{
temp = temp +srcstr[i];
j++;
} }
if(j>0)result[k] = temp;
return result;
}
function isNum(s) {
if (s-0<=9 && s-0 >=0) {
return true;
}
return false;
}
function isBiaoDian(s) {
var str=",.';:";
if(str.indexOf(s)>=0)
return true;
return false;
}//test
var result = splitestring("abcd234fghijk");
alert(result);
大致实现了你的要求,标点符号的定义你可以在isBiaoDian中加。
需要做特殊 处理,中文 字符需按二个字节算。
明天 我也再测试一下~~tks~~~
alert("01234567890123456781231231231239\r\na\r\naaaaf\r\n!hdfghfffd".truncate("3"));
}
String.prototype.truncate=function(n){
if(!this||!n||!(/^\d+$/.test(n.toString()))){
alert("n必须是整数且字符串不能空");
return;
}
var rowLength=Math.floor(this.length/n);
var results=new Array();
var start=0;
var end = 0;
while(start<this.length){
var regNum=new RegExp("\\d+","gi");
var temp=this.substring(start,Math.min(start+2*rowLength,this.length));
var arr=regNum.exec(temp);
var numIndex=regNum.lastIndex;
if(numIndex>rowLength){
end=numIndex+start;
}
var regCar=new RegExp("[\\r\\n]+","gi");
arr=regCar.exec(temp);
var carIndex=regCar.lastIndex;
if(carIndex>0&&numIndex==carIndex-(arr==null?0:arr[0].length)){
end=carIndex+start;
}else if(end!=carIndex-(arr==null?0:arr[0].length)+start&&carIndex>0){
end=carIndex+start;
}
var regSign=new RegExp("[,.?\";\'!:]+","gi");
arr=regSign.exec(temp);
var signIndex=regSign.lastIndex;
if(signIndex>0&&signIndex-(arr==null?0:arr[0].length)===carIndex||signIndex-(arr==null?0:arr[0].length)===carIndex){
end=signIndex+start;
}
if(start==end){
end=Math.min(start+rowLength,this.length);
}
results.push(this.substring(start,end));
start=end;
delete arr;
delete numIndex;
delete carIndex;
delete signIndex;
delete regNum;
delete regCar;
delete regSign;
}
return results;
}
</script>