js中根据字数截取字符串,不能截断url


Posted in Javascript onJanuary 12, 2012

今天收到个需求:
1,给一个文字,对输出的文字进行截取,保留400个字符
2,截取内容最后如果是url,保留完整url地址
3,添加省略号......
----
其中对url的保留比较麻烦,尤其是有两个相同url时不能采用indexOf获取其字符位置。
处理结果:

js中根据字数截取字符串,不能截断url

相关代码:
String.prototype.sizeAt = function(){ 
var nLen = 0; 
for(var i = 0, end = this.length; i<end; i++){ 
nLen += this.charCodeAt(i)>128?2:1; 
} 
return nLen; 
}; 
String.prototype.cutStr = function(n, sCut){ 
if(this.sizeAt() <= n){ 
return this; 
} 
sCut = sCut || ""; 
var max = n-sCut.sizeAt(); 
var nLen = 0; 
var s = this; 
for(var i =0,end = this.length;i<end;i++){ 
nLen += this.charCodeAt(i)>128?2:1; 
if(nLen>max){ 
s = this.slice(0,i); 
s += sCut; 
break; 
} 
} 
return s.toString(); 
}; 
String.prototype.cutStrButUrl = function(n, sCut){ 
if(this.sizeAt() <=n){ 
return this.toString(); 
} 
sCut = sCut || ""; 
var max = n-sCut.sizeAt(); 
var s = this; 
//查找所有包含的url 
var aUrl = s.match(/https?:\/\/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+([-_A-Z0-9a-z\$\.\+\!\*\/,:;@&=\?\~\#\%]*)*/gi); 
//当第max个字符刚好在url之间时,bCut会被设置为flase; 
var bCut = true; 
if(aUrl){ 
//对每个url进行判断 
for(var i=0, endI = aUrl.length;i<endI;i++){ 
var sUrl = aUrl[i]; 
//可能出现两个相同url的情况 
var aP = s.split(sUrl); 
var nCurr = 0; 
var nLenURL = sUrl.sizeAt(); 
var sResult = ""; 
for(j = 0, endJ = aP.length; j<endJ; j++){ 
nCurr +=aP[j].sizeAt(); 
sResult +=aP[j]; 
sResult += sUrl; 
//当前字数相加少于max但添加url超过max:即会截到url 
if(nCurr < max && nCurr + nLenURL>max){ 
s = sResult + sCut; 
bCut = false; 
break; 
} 
nCurr += nLenURL; 
} 
if(bCut === false){ 
break; 
} 
}; 
} 
if(bCut){ 
s = s.cutStr(n, sCut); 
} 
return s.toString(); 
}; 
console.log('正常截取20个字符'.cutStrButUrl(20,'......')); 
console.log('正常截取20个字符,但我超了'.cutStrButUrl(20,'......')); 
console.log('有url的字符串http://www.baidu.com你能截取到吗?'.cutStrButUrl(20,'......')); 
console.log('http://www.baidu.com有两个相同url的字符串http://www.baidu.com好吗?'.cutStrButUrl(51, '......'));
Javascript 相关文章推荐
如何使用Javascript正则表达式来格式化XML内容
Jul 04 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
Nov 12 Javascript
深入探寻javascript定时器
Jan 02 Javascript
JS实现来回出现文字的状态栏特效代码
Oct 31 Javascript
图解js图片轮播效果
Dec 20 Javascript
BOM之navigator对象和用户代理检测
Feb 10 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
Mar 10 Javascript
解读ES6中class关键字
Nov 20 Javascript
微信小程序实现MUI数字输入框效果
Jan 31 Javascript
解决vue+webpack打包路径的问题
Mar 06 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
LayUI+Shiro实现动态菜单并记住菜单收展的示例
May 06 Javascript
js 实现css风格选择器(压缩后2KB)
Jan 12 #Javascript
js日历功能对象
Jan 12 #Javascript
关于 文本框默认值 的操作js代码
Jan 12 #Javascript
新发现一个骗链接的方法(js读取cookies)
Jan 11 #Javascript
JS读取cookies信息(记录用户名)
Jan 10 #Javascript
判断对象是否Window的实现代码
Jan 10 #Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
Jan 10 #Javascript
You might like
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
Javascript实例教程(19) 使用HoTMetal(7)
2006/12/23 Javascript
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
javascript EXCEL 操作类代码
2009/07/30 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
2016/02/16 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
用AngularJS来实现监察表单按钮的禁用效果
2016/11/02 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
JavaScript中日常收集常见的10种错误(推荐)
2017/01/08 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
python实现京东秒杀功能
2018/07/30 Python
Python中按键来获取指定的值
2019/03/02 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
教你一分钟在win10终端成功安装Pytorch的方法步骤
2021/01/28 Python
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
怎样声明子类
2013/07/02 面试题
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
魅力教师事迹材料
2014/01/10 职场文书
图书室标语
2014/06/21 职场文书
师范类求职信
2014/06/21 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
浅谈python中的多态
2021/06/15 Python
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers
nginx配置指令之server_name的具体使用
2022/08/14 Servers