JS字符串操作总结

属性:length

方法:

match()

search()

replace()

slice() [汉]菜刀,切开

substring()

substr()

split() [汉]分离

indexOf()

lastIndexOf()

charAt()

charCodeAt()

fromCharCode()

//获取字符串字符个数 属性length
var username = 'mackxu';
username.length;        //5
//求一个字符串的字节长度
//假设:一个英文字符占用一个字节,一个中文字符占用两个字节
function countStringBytes(str) {
    var len = str.length;        //字符个数
    var bytes = len;            //如果都是单字节字符
    for (var i=0; i<len; i++) {
        if (str.charCodeAt(i)>255)
            bytes ++;            //双字节字符
    }
    return bytes;
}
/*
 * 字符串模式匹配方法
 * match(string/pattern) 查找 返回matches数组 与pattern.exec()相同
 * matches数组属性:
 *         index 子字符串在字符串中的位置
 *         input 表示谁应用了这个正则表达式(即原字符串)
 *         matches[0] 匹配到的子字符串
 *         matches[1] 捕获组匹配的字符串
 * 存放匹配结果的数组。该数组的内容依赖于 regexp 是否具有全局标志 g。
 * 注意:在全局检索模式g下,match()即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。
 * 
 * search(string/pattern) 参数是字符串时与indexOf()作用一样
 * 返回string中第一个与 regexp 相匹配的子串的起始位置。如果没有找到任何匹配的子串,则返回 -1。
 * replace() 替换
 * split() 字符串转换成数组
 * String.prototype.split() 执行的操作与 Array.prototype.join 执行的操作是相反的。
 */var text = 'cabt, bat, sat';
var pattern = /.at/;
var matches = text.match('bat');
console.log(matches.index);            //6
console.log(text.indexOf('bat'));    //6
console.log(text.search('bat'));    //6
/*
 * 字符串替换
 * replace('old', 'new')
 * replace(pattern, 'new')
 * 第二个参数可以使用的特殊字符
 * $&    RegExp.lastMatch 匹配到的子字符串
 * $`    RegExp.leftContext
 * $'    RegExp.rightContext
 * $n    匹配第n个捕获组子字符串
 * replace(pattern, function(match, pos, oldString){ //... })
 * 函数的参数: 子字符串, 子字符串的位置, 字符串
 */
var text = 'cat, bat, sat';
//cAT, bat, sat    只能替换第一个
var result = text.replace('at', 'AT');
//cAT, bat, sat
var result = text.replace(/at/, 'AT');
//cAT, bAT, sAT 替换全部
var result = text.replace(/at/g, 'AT');
//word(cat), word(bat), word(sat)
var result = text.replace(/(.at)/g, "word($1)");
//word(, bat, sat), word(, sat), word()
var result = text.replace(/(.at)/g, "word($')");
//去掉字符串两边的空格
String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, '');
}
/*
 * 字符串截取(获取子字符串) 不会修改原字符串
 * slice(start, end) 截取范围[statr, end) 下标从0开始
 * substring(start, end) 截取范围[statr, end)
 * substr(start, length)
 * 当传递的参数是负数时:slice()方法会将是负值的参数与字符串长度相加, 当start>end时返回''
 * substring()方法会将所有负值参数转换为0, 当start>end时返回 [end, start)
 * substr()方法如果第一个参数负值加上字符串长度, 如果第二个参数负值将其替换成0
 */
var str = 'good work';
var result = str.slice(-3);            //ork
var result = str.slice(-3, -5);        //'' start>end
var result = str.substring(2, 4);    //od
var result = str.substring(4, 2);    //od [2, 4)
var result = str.substring(-4, 2);    //go [0, 2)
var result = str.substring(2, -2);    //go [0, 2) 
var result = str.substring(-4, -2);    //'' [0, 0) 
var result = str.substr(-4, 1);        //w  (5, 1)
var result = str.substr(4, -3);        //'' (4, 0)
console.log(result);
/*
 * 字符串转成数组 split()
 * 数组转换成字符串 join()
 */
var str = 'good work';
var result = str.split('');            //字符数组
var result = str.split(/\s+/);        //使用正则做分隔符
var result = str.split('oo');        //["g", "d work"]
/*
 * 字符串查找
 * indexOf()
 * lastIndexOf()
 * match()
 * search()
 */

//获取指定位置的字符
//charAt(i) 返回指定的字符
//charCodeAt(i) 返回指定字符的字符编码

//fromCharCode() String构造函数的静态方法
//作用是把字符编码转换成字符

/*
 * 字符串连接
 * concat() String/Array
 * stringObject.concat(stringX,stringX,...,stringX)
 * stringObject.concat(array) array.toString();
 * 使用 " + " 运算符来进行字符串的连接运算通常会更简便一些
 * String.prototype.concat.apply(stringObject, array);
 */
var arr = ['a', 'b', 'c', 'd'];
var str = '';
str = str.concat(arr);        //a,b,c,d
str = String.prototype.concat.apply(str, arr);    //abcd
/*
 * 字符串比较
 * localeCompare() 字符串与字符串参数比较 返回数值
 * str1.localeCompare(str2)
 */

  

原文地址:https://www.cnblogs.com/mackxu/p/2839312.html