Javascript 字符串扩展

es6前端开发环境 前端集成开发环境 web前端你了解的开发环境

脚本语言对字符串的操作格外的重视,js也不例外,js本省提供了一些字符串的操作方法:charAt,charCodeAt,concat,indexOf,等基本操作。实际开发中经常需要其他的字符串处理,本文参考了一些框架对字符串操作,编写了一些常用的字符串扩展方法。
trim(String string)
裁剪字符串两旁的空白符,保留中间空白符
function trim(string) {
var trimRegex = /^[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+|[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000]+$/g; //Ext.js提供的正则
if (string) {
string = string.replace(trimRegex, “”);
}
return string || ”;
}其实,实现trim方法有很多种实现,之所以采用Ext.js的方法是因为,该方法是所有收录的trim方法中,速度最快的之一。附上一个常规的trim方法:
function trim(string){
return string.replace(/^s\s/,”).replace(/\s\s$/,”);
}
contains(String string, String search)
判断目标字符串 search 是否在string中,返回boolean:
function contains(string, search) {
if(search === void 0) {
return false;
}
return string.indexOf(search) !== -1;
}startWith(String string, String search, Boolean ignorecase)
上述方法的扩展,判断目标字符串search是否在string的开头,ignorecase(可选)是否忽略大小写,默认不忽略,返回boolean:
function startWith(string, search, ignorecase) {
var result = string.substr(0, search.length); //在开头截去目标字符串长度
return ignorecase ? result.toUpperCase() === string.toUpperCase() : result === search;
}
endWidth(String string, String search, Boolean ignorecase)
这次判断是否在string结尾,参数同上
function endWidth(string, search, ignorecase) {
var result = string.substr(string.length – search.length);
return ignorecase ? result.toUpperCase() === string.toUpperCase() : result === search;
}
repeat(String target, Int n, String sep)
根据给定的格式字符串与指定的重复次数返回一个新的格式字符串,n:一共重复几次,sep(可选):重复字符串连接方式,默认“”;返回string
[code]function repeat(target, n, sep) {
n = n < 0 ? 0 : n;
for(var buf=[]; n > 0; n–){
buf.push(target);
}
return buf.join(sep || “”);
}[/code]上述方法通过构造buf数组利用join实现,这里还有一种速度更快的实现方式,我们复制数组并没有必要一个个复制,采用二分法进行操作,这样就可以并不需要复制n次,mass.js实现代码:
[code]function repeat(target, n) {
var s = target,
total = “”;
while (n > 0) {
if (n % 2 == 1){
total += s;
}
if (n == 1) {
break;
}
s += s;
n = n >> 1; //相当于将n除以2取商
}
return total;
}[/code]
byteLen(String string, Int fix)
获取一个字符串的字节长度,string指定字符串,fix(可选)规定一个中文字符占几个字节,默认2个
[code]function byteLen(string, fix) {
fix = fix ? fix : 2;
var str = new Array(fix + 1).join(“-“);
return string.replace(/[^\x00-\xff]/g,str).length; //将汉字全部替换成 — 之类的,然后查看长度
}[/code]
ellipsis(String string, Int len, String escripe)
对大于指定长度的字符串,进行裁剪,增加省略号(‘…’)的显示; string指定字符串,len总长度,默认30,escripe(可选)指定增加的符号默认“…”:
[code]function ellipsis(string, len, escripe) {
len = len || 30; //默认30截去
escripe = escripe === void 0 ? “…” : escripe;
return string.length > len ? string.slice(0, len – escripe.length) + escripe : string;
}
[/code]
capitalize(String string)
返回一个字符串首字母大写
[code]function capitalize(string) {
return string.charAt(0).toUpperCase() + string.substr(1).toLowerCase();
}[/code]
pad(String string, Int len, String fill, String direct)
类似php中str_pad方法,把字符串填充为指定长度。
string 指定字符串,len 填充后总长度(若小于给定字符串长度则不填充),fill(可选) 规定填充字符 默认”0″, direct(可选)规定填充方向 默认右侧填充 值:”PAD_LEFT” “PAD_RIGHT”
[code]function pad(string, len, fill, direct) {
fill = fill || “0”;
while(string.length < len) { //和给定填充后长度对; Ext.js采用质朴长存法,这样就可以避免了每次计算string.length的麻烦
if(direct === “PAD_LEFT”) {
string = fill + string;
}else{
string = string + fill;
}
}
return string;
}
//示例:
pad(“AA”,”4″); //”AA00″
pad(“AA”,”4″,”-“,”PADLEFT”); //”–AA”[/code]
camelize(String string)
返回一个字符串的驼峰书写形式
[code]function camelize(string) {
if(string.indexOf(“-“) < 0 && string.indexOf(“
“) < 0) {
return string; //直接返回
}
return string.replace(/[-][^-]/g, function(match) { //对 “_” 、”-” 及其紧跟的一个字符进行匹配
return match.charAt(1).toUpperCase();
})
}[/code]
urlAppend(String url, String string)
追加url的search部分,返回追加后的url
[code] function urlAppend(url, string) {
return string === void 0 ? string : url + (url.indexOf(‘?’) === -1 ? ‘?’ : ‘&’) + string;
}
[/code]
removeScripts(String string)
删除字符串中script标签及其包含内容,返回结果
[code]function removeScripts(string) {
return string === void 0 ? string : string.replace(/<script[^>]>([\S\s]?)<\/script>/img,””);
}[/code]
**



**
根据{}格式化输出字符串
string给定字符串,支持两种传参方式:如果字符串的占位符为0,1,2这类的非零整数,要求传入两个或者两个以上的参数;否则就传入一个对象,键名为占位符:
[code]function format(string, args) {
var array = Array.prototype.slice.call(arguments,1);
return string.replace(/{([^{}]+)}/gm,function(match,name){
var index = Number(name); //尝试是不是数字;
if(index >= 0) {
return array[index];
}
if(args && args[name] !== void 0) {
return args[name];
}
return ”; //都没有的情况下
})
}
//示例
var aa = format(“姓名:{0};年龄:{1}”,”CaelumTian”,”21″);
console.log(aa) //姓名:CaelumTian;年龄:21
var bb = format(“姓名:{name};年龄:{age}”,{
“name” : “CaelumTian”,
“age” : “21”
})
console.log(bb); //姓名:CaelumTian;年龄:21
[/code]
以上就是我觉得比较常用的字符串扩展,当然,js的字符串扩展还有一些其他的函数扩展,比如escapeHTML,wbr,toFloat等方法,用到的有点少。有兴趣的可以参考Ext.js Prototype.js这类框架对字符串的其他扩展方法

前端开发都有那些环境 搭建前端开发环境搭建 毕业论文前端开发环境

» 本文来自:前端开发者 » 《Javascript 字符串扩展》
» 本文链接地址:https://www.rokub.com/5965.html
» 您也可以订阅本站:https://www.rokub.com
赞(0)
64K

评论 抢沙发

评论前必须登录!