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 相关文章推荐
JQuery autocomplete 使用手册
Apr 01 Javascript
js仿百度贴吧验证码特效实例代码
Jan 16 Javascript
js完美的div拖拽实例代码
Jan 22 Javascript
使用js判断当前时区TimeZone是否是夏令时
Feb 23 Javascript
借助javascript代码判断网页是静态还是伪静态
May 05 Javascript
javascript实现密码验证
Nov 10 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
Jan 04 Javascript
JavaScript中的call和apply的用途以及区别
Jan 11 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
Sep 11 Javascript
详解vue如何使用rules对表单字段进行校验
Oct 17 Javascript
jquery插件开发模式实例详解
Jul 20 jQuery
Antd-vue Table组件添加Click事件,实现点击某行数据教程
Nov 17 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和AJAX创建RSS聚合器的代码
2007/03/13 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
JS高级运动实例分析
2016/12/20 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
Node.js API详解之 dns模块用法实例分析
2020/05/15 Javascript
Python从MP3文件获取id3的方法
2015/06/15 Python
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
深入了解python中元类的相关知识
2019/08/29 Python
python多继承(钻石继承)问题和解决方法简单示例
2019/10/21 Python
python数据预处理方式 :数据降维
2020/02/24 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
python palywright库基本使用
2021/01/21 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
《风娃娃》教学反思
2014/04/19 职场文书
励志演讲稿大全
2014/08/21 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
pytorch 实现多个Dataloader同时训练
2021/05/29 Python
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL