JavaScript 字符串操作
①
给索引查字符 (
charAt / charCodeAt )
charAt,获取相应位置字符(参数: 字符位置)
注释:字符串中第一个字符的下标是 0。如果参数 index 不在 0 与 string.length 之间,该方法将返回一个空字符串。
charCodeAt,获取相应位置字符编码(参数: 字符位置)
charAt()方法和charCodeAt()方法用于选取字符串中某一位置上的单个字符
区别:charCodeAt()方法,它并不返回指定位置上的字符本身,而是返回该字符在Unicode字符集中的编码值。如果该位置没有字符,返回值为NaN.
字符/字符编码 = Str.charAt/charCodeAt(索引值);
②
给字符查索引(
indexOf / lastIndexOf)
indexOf,从前向后索引字符串位置(参数: 索引字符串)
从前面寻找第一个符合元素的位置
lastIndexOf,从后向前索引字符串位置(参数:索引字符串)
从后面寻找第一个符合元素的位置
找不到则返回 -1
索引值 = str.indexOf/lastIndexOf(想要查询的字符);
③
uri 编码和解码
URI (Uniform ResourceIdentifiers,通用资源标识符)进行编码,以便发送给浏览器。有效的URI中不能包含某些字符,例如空格。而这URI编码方法就可以对URI进行编码,它们用特殊的UTF-8编码替换所有无效的字符,从而让浏览器能够接受和理解。(它们是BOM下的一个方法,属于window对象)
encodeURIComponent() 函数可把字符串作为 URI 组件进行
编码
decodeURIComponent() 函数可把字符串作为 URI 组件进行
解码
④
字符串的链接(
concat)
新字符串 = str1.concat(str2); 链接两个字符串
⑤
字符串的截取
slice,截取字符串(参数:1. 截取位置【必须】,2. 终结点)
字符串 = str.slice(索引1,索引2); //两个参数都是索引值。
//(2,5) 正常包左不包右
//(2) 从指定的索引位置剪到最后
//(-3) 从倒数第几个剪到最后
//(5,2) 前面的大,后面的小,无意义,空
substr,截取字符串(参数:1. 截取位置【必须】,2. 截取长度)
字符串 = str.substr(参数1,参数2); //1索引值,2长度
// 第一个参数为从索引位置取值,第二个参数返回字符长度
//(2,4)从索引值为2的字符开始,截取4个字符
//(1) 一个值,从指定位置到最后
//(-3) 从倒数第几个剪到最后
// 不包括前大后小的情况
substring 同slice
字符串 = str.substring(参数1,参数2); //两个参数都是索引值。
//不同1:参数智能调转位置
//不同2:参数负值,将全部获取字符串
//(2,5) 正常包左不包右
//(2) 从指定的索引位置剪到最后
//(-3) 获取全部字符串
//(5,2) 前面的大,后面的小,不是空,同(2,5),智能调换
⑥
特殊方法
trim( ) 只能去除字符串前后两端的空白
var str = " aaa bnn dccc "
console.log(str.trim()); //aaa bnn dccc
replace( ) 替换
var str = "abc";
console.log(str.replace("a","b"));//bbc
split( ) 把字符串切割成数组,
和 join方法(数组转为字符串) 是天生一对
var str = "我-爱-你-中-国";
//若参数为空字符串"",默认用逗号把字符串中的每个元素分隔
console.log(str.split(""));//["我", "-", "爱", "-", "你", "-", "中", "-", "国"]
//若不写参数,整个字符串作为数组的一个元素
console.log(str.split());//["我-爱-你-中-国"]
//分隔完毕之后,使用的工具将不存在数组中
console.log(str.split("-"));//["我", "爱", "你", "中", "国"]
to(Locale)UpperCase() 转换大写
to(Locale)LowerCase() 转换小写
案例:如何在一个字符串中查找所有的匹配项?
var arr1 = 'a,b,d,e,f,e,f,e,g'.split(',');
//找到第一个e的索引
arr1.indexOf('e');//3
//等价于(第二个参数:从第0个位置开始找)
arr1.indexOf('e',0);//3
//找到第二个e的索引(从第一个找到的位置的下一个位置开始找)
arr1.indexOf('e',4);//5
//找到所有的e
var i1 = arr1.indexOf('e');
var i2 = arr1.indexOf('e', i1 + 1);
var i3 = arr1.indexOf('e', i2 + 1);
var i4 = arr1.indexOf('e', i3 + 1);
//将上述代码从形式上转换成一模一样的代码
//将其写入循环(while)
i1 = -1;
while(1){
i1 = arr1.indexOf('e', i1 + 1);
//什么时候跳出?
//如果i1结果是-1,说明从左往右查找字符串都没有得到需要的数据,即已经遍历完所有数据
if(i1 == -1){
break;
}
}
//改良(bug:进不去循环)
var i1 = -1;
while(i1 != -1){
i1 = arr1.indexOf('e', i1 + 1);
}
//先做一次再进循环
var i1 = -1;
do{
i1 = arr1.indexOf('e', i1 + 1);
if(i1 != -1){
console.log(i1);
}
}while(i1 != -1);