字符串的扩展与修复

来源:互联网 发布:linux的cat命令 编辑:程序博客网 时间:2024/04/28 10:31

方法引自 司徒正美 的<<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 补加1function 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可以为字符串的某一段添加字符串。常见的用法如日历在月份前补零,因为也称之为fillZerofunction 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 manfunction 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