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变量作用域更轻松
Oct 25 Javascript
jQuery新闻滚动插件 jquery.roller.js
Jun 27 Javascript
javascript内存管理详细解析
Nov 11 Javascript
查找Oracle高消耗语句的方法
Mar 22 Javascript
javascript实现英文首字母大写
Apr 23 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
Dec 17 Javascript
浅谈JS中逗号运算符的用法
Jun 12 Javascript
微信小程序 跳转方式总结
Apr 20 Javascript
React组件生命周期详解
Jul 03 Javascript
jQuery zTree 异步加载添加子节点重复问题
Nov 29 jQuery
vue中的适配px2rem示例代码
Nov 19 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
Apr 29 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中的一个中文字符串截取函数
2007/02/14 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
php使用curl详细解析及问题汇总
2016/08/11 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
Python计算三角函数之asin()方法的使用
2015/05/15 Python
Python的迭代器和生成器
2015/07/29 Python
python 生成器协程运算实例
2017/09/04 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
python smtplib模块自动收发邮件功能(二)
2018/05/22 Python
python自动化之Ansible的安装教程
2019/06/13 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
python中操作文件的模块的方法总结
2021/02/04 Python
广告学专业应届生求职信
2013/10/01 职场文书
两年的个人工作自我评价
2014/01/10 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
村党支部书记承诺书
2014/05/29 职场文书
2015年精神文明建设工作总结
2015/04/21 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
python中if和elif的区别介绍
2021/11/07 Python
JavaScript 对象创建的3种方法
2021/11/17 Javascript
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers