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 相关文章推荐
10个实用的脚本代码工具
May 04 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
Sep 23 Javascript
jQuery插件实现图片轮播特效
Jun 16 Javascript
js实现消息滚动效果
Jan 18 Javascript
几种tab切换详解
Feb 03 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
Feb 09 Javascript
详解jquery插件jquery.viewport.js学习使用方法
Sep 08 jQuery
vue中element 上传功能的实现思路
Jul 06 Javascript
微信小程序自定义组件实现环形进度条
Nov 17 Javascript
jqGrid表格底部汇总、合计行footerrow处理
Aug 21 Javascript
JavaScript实现图片上传并预览并提交ajax
Sep 30 Javascript
vue实现简单全选和反选功能
Sep 15 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
php利用iframe实现无刷新文件上传功能的代码
2011/09/29 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
jQuery中的ajax async同步和异步详解
2015/09/29 Javascript
JS去除空格和换行的正则表达式(推荐)
2016/06/14 Javascript
JS 面向对象之继承---多种组合继承详解
2016/07/10 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
AngularJs  E2E Testing 详解
2016/09/02 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
用Node写一条配置环境的指令
2019/11/14 Javascript
JS实现前端动态分页码代码实例
2020/06/02 Javascript
js实现盒子移动动画效果
2020/08/09 Javascript
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
2015/10/13 Python
python万年历实现代码 含运行结果
2017/05/20 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
阿迪达斯越南官网:adidas越南
2020/07/19 全球购物
项目经理任命书范本
2014/06/05 职场文书
500字小学生检讨书
2015/02/19 职场文书
机关保密工作承诺书
2015/05/04 职场文书
加薪申请报告范本
2015/05/15 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
经销商会议开幕词
2016/03/04 职场文书
Win11无法访问设备和打印机 如何解决页面空白
2022/04/09 数码科技