我觉得 任何一门编程语言,需要处理最多的,就是字符串和数组,所以这里把字符串和数组的常用操作总结一下,本篇只记录字符串的方法
常用方法
var str="hello world";
//slice方法:第一个参数:子字符串开始位置,第二个参数:子字符串最后一个字符后面的位置
console.log(str.slice(3,7)); //lo w 包含头不包含尾
console.log(str.slice(3,-4)); //lo w -4表示从后面向前4个长度的位置
console.log(str.slice(3)); //lo world 没有第二个参数,默认到字符串结尾
//substring方法:第一个参数:子字符串开始位置,第二个参数:子字符串最后一个字符后面的位置
console.log(str.substring(3,7)); //lo w
console.log(str.substring(3)); //lo world
str.substring(3,0) == str.substring(0,3) //方法会将较小数作为开始位置较大数作为结束位置
str.substring(3,-4) == str.substring(3,0) == str.substring(0,3)
//substr方法:第一个参数:子字符串开始位置,第二个参数:返回的字符个数
console.log(str.substr(3,7)); //lo worl 7表示返回7个字符
console.log(str.substr(3)); //lo world
console.log(str.substr(3,-4)); //""空字符串
//indexOf方法:是从字符串的开头向后搜索子字符串
console.log(str.indexOf("o",6)); //7
console.log(str.indexOf("o")); //4
//lastIndexOf方法:是从字符串的结尾向前搜索子字符串
console.log(str.lastIndexOf("o",6));//4
console.log(str.lastIndexOf("o")); //7
indexOf方法和lastIndexOf方法:都是从一个字符串中搜索给定的子字符串,并返回子字符串的位置;
如果没有找到,则返回-1。这两个方法都可以接收两个参数:要查找的子字符串和查找的位置
//trim方法:方法用来删除字符串前后的空格,并不会修改原字符串
var str=" hello world ";
console.log('('+str.trim()+')'); //(hello world)
console.log('('+str+')'); //( hello world )
//match方法:只接受一个参数,由字符串或RegExp对象指定的一个正则表达式
var str="1 plus 2 equal 3"
document.write(str.match(/\d+/g)) //1,2,3
//search方法:只接受一个参数,由字符串或RegExp对象指定的一个正则表达式
search方法返回字符串中第一个匹配项的索引,如果没有匹配项,返回-1
var str="cat,bat,sat,fat";
var pattern=/.at/;
var matches=str.match(pattern);
console.log(matches.index); //0
console.log(matches[0]); //cat
console.log(pattern.lastIndex); //0 lastIndex表示开始搜索下一个匹配项的字符位置
从0算起
var pos=str.search(/at/);
console.log(pos); //1 1表示at字符串在原来字符串中第一次出现的位置
//replace方法
var str="cat,bat,sat,fat";
var res=str.replace("at","one"); //第一个参数是字符串,所以只会替换第一个子字符串
console.log(res);//cone,bat,sat,fat
var res1=str.replace(/at/g,"one"); //第一个参数是正则表达式,所以会替换所有的子字符串
console.log(res1);//cone,bone,sone,fone
//split 将字符串分割成字符串数组
//如果把空字符串 ("") 用作分割,那么 string 中的每个字符之间都会被分割。
var str="red,blue,green,yellow";
console.log(str.split(",")); //["red", "blue", "green", "yellow"]
console.log(str.split(",",2)); //["red", "blue"] 第二个参数用来限制数组大小
console.log(str.split(/[^\,]+/));// ["", ",", ",", ",", ""]
//第一项和最后一项为空字符串是因为正则表达式指定的分隔符出现在了子字符串的开头,
即"red"和"yellow" 。[^...] 表示不在方括号内的任意字符 只要不是逗号都是分隔符
//localeCompare 这个方法用于比较两个字符串
/*
1.如果字符串在字母表中应该排在字符串参数之前,则返回一个负数
1.如果字符串等于字符串参数,则返回0
1.如果字符串在字母表中应该排在字符串参数之后,则返回一个正数
*/
var str="yellow";
console.log(str.localeCompare("brick"));//1
console.log(str.localeCompare("yellow"));//0
console.log(str.localeCompare("zoo"));//-1
//字符串大小写转换方法
var str="HELLO world";
console.log(str.toLowerCase()); //hello world
console.log(str.toUpperCase()); //HELLO WORLD
//charAt方法是以单字符字符串的形式返回给定位置的那个字符 等同于下标。
charCodeAt方法获取到的不是字符而是字符编码
var str="hello"
str.charAt(1) //e
str[1] //e
str.charCodeAt(1) //101
//concat方法 和 + 操作一样,一般不用
var str="hello ";
var res=str.concat("world");
console.log(res); //hello world
console.log(str); //hello 原字符串的值未改变
var res1=str.concat("nihao","!");
console.log(res1); //hello nihao! concat方法可以接收任意多个参数
不常用方法
//fromCharCode方法 编码转字符串
/*
fromCharCode方法是接收一或多个字符编码,然后将其转换为字符串
fromCharCode方法是String构造函数的一个静态方法
*/
console.log(String.fromCharCode(104,101,108,108,111)); //hello
//找到匹配字符串所在的各个位置
var str="asadajhjkadaaasdasdasdasd";
var position=[];
var pos=str.indexOf("d");
while(pos>-1){
position.push(pos);
pos=str.indexOf("d",pos+1);
}
console.log(position); //[3, 10, 15, 18, 21, 24]
//字符串去重
//String.split() 执行的操作与 Array.join 执行的操作是相反的
//split() 方法用于把一个字符串分割成字符串数组。
//join方法用于将字符串数组连接成一个字符串
var str="aahhgggsssjjj"; //这里字符串没有可以分隔的字符,所以需要使用空字符串作为分隔符
function unique(msg){
var res=[];
var arr=msg.split("");
//console.log(arr);
for(var i=0;i<arr.length;i++){
if(res.indexOf(arr[i])==-1){
res.push(arr[i]);
}
}
return res.join("");
}
console.log(unique(str)); //ahgsj
json 和 字符串 相互转换
//JSON字符串:
var str1 = '{ "name": "张三", "age": "22" }';
//JSON对象:
var str2 = { "name": "张三", "sex": "22" };
//由JSON字符串转换为JSON对象
var obj = eval('(' + str + ')');
或者
var obj = str.parseJSON();
或者
var obj = JSON.parse(str);
//将JSON对象转化为JSON字符
var last=obj.toJSONString();
或者
var last=JSON.stringify(obj);