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 tools之tooltip
Jul 25 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
Mar 21 Javascript
JQuery EasyUI 对话框的使用方法
Oct 24 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
Apr 17 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
Jun 20 Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 Javascript
js获取一组日期中最近连续的天数
May 25 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
Jul 27 Javascript
详解Vue双向数据绑定原理解析
Sep 11 Javascript
vue项目如何刷新当前页面的方法
May 18 Javascript
Nest.js 授权验证的方法示例
Feb 22 Javascript
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
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的memcached客户端memcached
2011/06/14 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
php 魔术方法详解
2014/11/11 PHP
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
jQuery结合HTML5制作的爱心树表白动画
2015/02/01 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
简单实现AngularJS轮播图效果
2020/04/10 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
Vue程序调试的方法
2019/06/17 Javascript
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
Python实现批量压缩图片
2018/01/25 Python
图解Python变量与赋值
2018/04/03 Python
Python读取本地文件并解析网页元素的方法
2018/05/21 Python
详解如何减少python内存的消耗
2019/08/09 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
CSS3使用transition实现的鼠标悬停淡入淡出
2015/01/09 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
公司JAVA开发面试题
2015/04/02 面试题
网络教育自我鉴定
2013/11/01 职场文书
应届生污水处理求职信
2013/11/06 职场文书
生产现场工艺工程师岗位职责
2013/11/28 职场文书
股东出资协议书
2016/03/21 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏