javascript - js实现字符缩略...显示
本文介绍了javascript - js实现字符缩略...显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
编写一个方法,格式化字符串:
原始字符串为:"哈哈ddd呵呵789哈哈88998哈.xls"
要求:'.xls'前面的字符串,最多保留中文字符9个,数字字母最多18个,从中间用...省略,保留末尾两个中文字符或4个字母数字。
比如,格式化后的字符串为:"哈哈ddd呵呵789...98哈.xls"
解决方案
// 原始字符串为:"哈哈ddd呵呵789哈哈88998哈.xls"
// 要求:'.xls'前面的字符串,最多保留中文字符9个,数字字母最多18个,从中间用...省略,保留末尾两个中文字符或4个字母数字。
// 比如,格式化后的字符串为:"哈哈ddd呵呵789...98哈.xls"
// 我的理解为中英文混排不超过18个字符(中文算两个,英文算一个)
// 所以结果为 哈哈ddd呵呵789哈哈...98哈.xls
// 判断是否为中文
function isChinese(temp) {
var re = /[^\u4E00-\u9FA5]$/;
if (re.test(temp)) return false;
return true;
}
var str = "哈哈ddd呵呵789哈哈88998哈.xls"
// 另一种情况 不满18个字符的
// var str = "哈哈ddd呵呵.xls"
var processStrArr = str.split('.')[0].split('')
// 取出前几位
var headerIndex
var header = 0
for (var i=0;i<processStrArr.length;i++) {
if (header < 18) {
// 中文字符加2 英文加1
var num = (isChinese(processStrArr[i]) ? 2 : 1)
header = header + num
headerIndex = i
} else {
headerIndex = i
break
}
}
var headerStr = processStrArr.slice(0, headerIndex).join('')
// 取出剩下的
var nextStrArr = processStrArr.slice(headerIndex)
var footerIndex
var footer = 0
var reverseArr
var lastStr = ''
// 如果有倒着寻找
if (nextStrArr.length) {
reverseArr = nextStrArr.reverse()
for (var j=0;j<reverseArr.length;j++) {
if (footer < 4) {
var num = (isChinese(reverseArr[j]) ? 2 : 1)
footer = footer + num
footerIndex = j
} else {
footerIndex = j
break
}
}
lastStr = '...' + reverseArr.slice(0, footerIndex).reverse().join('')
}
// 最后拼接
var result = headerStr + lastStr + '.' +str.split('.')[1]
console.log(result)
// 哈哈ddd呵呵789哈哈...98哈.xls
你在封装优化一下就好
这篇关于javascript - js实现字符缩略...显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文