字符串的扩展与修复

方法引自 司徒正美 的<<JavaScript框架设计>>

1、判定一个字符串是否包含另一个字符串

2、判定目标字符串是否位于原字符串的开始之处

3、判定目标字符串是否位于原字符串的结束之处

4、将一个字符串重复自身N次

5、取得一个字符串所有字节的长度

6、使用正则,并支持指定汉字的储层字节数。比如mysql储层汉字时,是用3个字节数的

7、用于对字符串进行截断处理,当超过限定长度,默认添加三个点号或其他什么的。

8、转换为驼峰风格

9、转换为下划线风格

10、转换为连字符风格,亦即CSS变量的风格

11、首字母大写

12、移除字符串中的html标签

13、移除字符串中所有的 script 标签

14、将字符串经过 html 转义得到合适在页面中显示的内容,如将<替换成<

15、将字符串中的 html 实体字符还原为对应的字符

16、将字符串安全格式化为正则表达式的源码

17、可以为字符串的某一段添加字符串。常见的用法如日历在月份前补零

18、模版

19、在字符串两端添加双引号,然后内部需要转义的地方都要转义,用于接装JSON的键名或模析系统中

20、去除字符串两端的空白


//判定一个字符串是否包含另一个字符串
function contains(target, it){
    return target.indexOf(it) != -1; //indexof改成search, lastIndexof
}
function contains(target, str, separator){
    return separator ? (separator + target + separator).indexof(separator + str + separator) > -1 : target.indexOf(str) > -1;
};

//判定目标字符串是否位于原字符串的开始之处
//最后参数忽略大小写
function startWith(target, str, ignorcecase){
    var start_str = target.substr(0, str.length);
    return ignorcecase ? start_str.toLowerCase() === str.toLowerCase() : start_str === str;
};

//判定目标字符串是否位于原字符串的结束之处
//最后一参数忽略大小写
function endWith(target, str, ignorecase){
    var end_str = target.substring(target.length - str.length);
    return ignorcecase ? start_str.toLowerCase() === str.toLowerCase() : end_str === str;
};

//repeat方法:将一个字符串重复自身N次,repeat("ruby",2) => rubyruby;
function repeat(target, n){
    return (new Array(n+1)).join(target);
};
function repeat(target, n){
    return Array.prototype.join.call({
        length: n+1
    }, target);
};
var repeat = (function(){
    var join = Array.prototype.join, obj = {};
    return function(target,n){
        obj.length = n + 1;
        return join.call(obj, target);
    };
})();
function repeat(target, n){
    var s = target, total = [];
    while( n>0 ){
        if(n%2 == 1) total[total.length] = s; //如果是基数
        if(n == 1){
            break;
            s += s;
            n = n >> 1; //相当于将n除以2取其商,或说开2二次方
        }
    };
    return total.join('');
};
function repeat(target,n){
    var s = target, c = s.length*n;
    do {
        s += s;
    }while( n = n>>1 );
    s = s.substring(0,c);
    return s;
};
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;
    };
    return total;
};
function repeat(target, n){
    if(n == 1){
        return target;
    }
    var s = repeat(target, Math.floor(n/2));
    s += s;
    if(n%2) s+= target;
    return s;
}
function repeat(target,n){
    return(n<=0) ? "" : target.concat(repeat(target,--n));
}

//取得一个字符串所有字节的长度
//英文字符占用一个字节,中文字符占用两个字节
//假设字符串每个字符的 Unicode 编码均小于等于 255,byteLength 为字符串长度;再遍历字符串,遇到 Unicode 编码大于 255 时,为 byteLength 补加1
function byteLen(target){
    var byteLength = target.length, i=0;
    for(; i<target.length; i++){
        if(target.charCodeAt(i) > 255){
            byteLength++;
        }
    };
    return byteLength;
}

//使用正则,并支持指定汉字的储层字节数。比如mysql储层汉字时,是用3个字节数的
function byteLen(target,fix){
    fix = fix ? fix : 2;
    var str = new Array(fix + 1).join("-");
    return target.replace(/[^\x00-\xff]/g, str).length;
};

//用于对字符串进行截断处理,当超过限定长度,默认添加三个点号或其他什么的。
function truncate(target, length, truncation){
    length = length || 30;
    truncation = truncation === void(0) ? '...' : truncation;
    return target.length > length ? target.slice(0,length - truncation.length) + truncation : String(target);
}

//转换为驼峰风格
function camelize(target){
    if(target.indexOf('-')<0 && target.indexOf('_')<0){
        return target;
    }
    return target.replace(/[-_][^-_]/g, function(match){
        return match.charAt(1).toUpperCase();
    });
}

//转换为下划线风格
function underscored(target){
    return target.replace(/(a-z\d)(A-Z)/g, '$1_$2').replace(/\-/g, '_').toLowerCase();
}

//转换为连字符风格,亦即CSS变量的风格。
function dasherize(target){
    return underscored(target).replace(/_/, '-');
}

//首字母大写
function capitalize(target){
    return target.charAt(0).toUpperCase() + target.substring(1).toLowerCase();
}

//stripTags方法:移除字符串中的html标签,但这方法有缺陷,如里面有script标签,会把这些不该显示出来的脚本也显示出来。
function stripTags(target){
    return String(target || "").replace(/<[^>]+>/g, '');
}
//stripScripts方法:移除字符串中所有的 script 标签。弥补stripTags 方法的缺陷。此方法应在stripTags之前调用。
function stripScripts(target){
    return String(target || "").replace(/<script[^>]*>([\S\s]*?)<\/script>/img, '');
}

//escapeHTML方法:将字符串经过 html 转义得到合适在页面中显示的内容,如将<替换成<。
function escapeHTML(target){
    return target.replace(/&/g, '&')
        .replace(/</g, '<')
        .replace(/>/g, '>')
        .replace(/"/g, '"')
        .replace(/'/g, "'");
}

//unescapeHTML:将字符串中的 html 实体字符还原为对应的字符。
function unescapeHTML(target){
    return target.replace(/"/g, '"')
        .replace(/</g, '<')
        .replace(/>/g, '>')
        .replace(/&/g, "&")
        .replace(/&#([\d]+);/g, function($0, $1){
            return String.fromCharCode(parseInt($1, 10));
        });
}

//eacapeRegExp:将字符串安全格式化为正则表达式的源码,源代码处[\\]为[\]
function escapeRegExp(target){
    return target.replace(/([-.*+?^${}()|[\\]\/\\)/g, '\\$1');
}

//pad方法:与trim相反,pad可以为字符串的某一段添加字符串。常见的用法如日历在月份前补零,因为也称之为fillZero
function pad(target, n){
    var zero = new Array(n).join('0');
    var str = zero + target;
    var result = str.substr(-n);
    return result;
}
function pad(target, n){
    return Array((n+1) - target.toString().split('').length).join('0') + target;
}
function pad(taret, n){
    return (Math.pow(10,n) + "" + target).slice(-n);
}
function pad(target, n){
    return ((1 << n).toString(2) + target).slice(-n);
}
function pad(target, n){
    return (0..toFixed(n) + target).slice(-n);
}
function pad(target, n){
    return (1e20 + "" + target).slice(-n);
}
function pad(target, n){
    var len = target.toString().length;
    while(len<n){
        target = "0" + target;
        len++;
    };
    return target;
}
//filling填充内容,right从首/尾填充,radix进制
//A.toString(radix):A在字符串下radix都是一样的。当A为数字类型的变量,根据radix进制转为不同的字符串。需要注意,不可以直接 数字.toSting()
//var A = 10, A.toString() √; 10.toString() ×;
function pad(target, n, filling ,right, radix){
    var num =  target.toString(radix || 10);
    filling = filling || "0";
    while( num.length < n ){
        if(!right){
            num = filling + num;
        }else{
            num += filling;
        }
    }
    return num;
}

//模版
//var a = format("Result is #{0},#{1}", 22, 33);
// Result is 22,33
//var b = format("#{name} is a #{sex}", {name: "Jhon", sex: "man"});
//Jhon is a man
function format(str, object){
    var array = Array.prototype.slice.call(arguments, 1);
    return str.replace(/\\?\#{([^{}]+)}/gm, function(match, name){
        if(match.charAt(0) == '\\') return match.slice(1);
        var index = Number(name);
        if(index >= 0) return array[index];
        if( object && object[name] !== void 0) return object[name];
        return '';
    })
};
//quote方法:在字符串两端添加双引号,然后内部需要转义的地方都要转义,用于接装JSON的键名或模析系统中
var escapeable = /["\\\x00-\x1f\x7f-\x9f]/g,
    meta = {
        '\b': '\\b',
        '\t': '\\t',
        '\n': '\\n',
        '\f': '\\f',
        '\r': '\\r',
        '"': '\\"',
        '\\': '\\\\'
    };
function quote(target){
    if(target.match(escapeable)){
        return '"' + target.replace(escapeable, function(a){
                var c = meta[a];
                if(typeof c === 'string'){
                    return c;
                };
                return '\\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4)
            }) + '"';
    }
    return '"' + target + '"';
}

//trim:去除字符串两端的空白
function trim(str){
    return str.replace(/^\s\s*/, '').replace(/\s\s*$/,'');
}
function trim(str){
    return str.replace(/^\s+/, '').replace(/\s+$/, '');
}
function trim(str){
    return str.substring(Math.max(str.search(/\S/), 0), str.search(/\S\s*&/) + 1);
}
function trim(str){
    return str.replace(/^\s+|\s+$/g, '');
}
function trim(str){
    str = str.match(/\S+(?:\s+\S+)*/);
    return str ? str[0] : '';
}
function trim(str){
    return str.replace(/^\s*(\S*(\s+\S+)*)\s*&/, '$1');
}
//同上接近,但用了非捕获分组进行了优点,性能有点点提升
function trim(str){
    return str.replace(/^\s*(\S*(?:\s+\S+)*)\s*&/, '$1');
}
function trim(str) {
    return str.replace(/^\s*((?:[\S\s]*\S)?)\s*&/, '$1');
}
function trim(str) {
    return str.replace(/^\s*([\S\s]*?)\s*&/, '$1');
}
function trim(str){
    str = str.replace(/^\s+/, '');
    for(var i=str.length-1; i>=0; i--){
        if(/\S/.test(str.charAt(i))){
            str = str.substring(0,i+1);
        }
    };
    return str;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值