the Methods of String

字符串的方法总结(注意字符串的不可变性)

1 str.charAt(index) : 返回位于index处的字符 ;如果index不在0和str.length-1之间那么返回一个空字符

2 str.charCodeAt(index): 返回位于index处的字符的Unicode编码,如果index不在0和str.length-1之间,那么返回NaN

3 str.indexOf(searchvalue,fromindex) : 返回被检索字符串第一次出现的位置值,如果找不到返回 -1,注意对大小写敏感

stringObject 中的字符位置是从 0 开始的。

1
console.log('item?'.indexOf('?'));//4

正则 str.search(refexp) 不执行全局匹配,返回被检索字符第一次出现的位置值 如果找不到,返回-1 ;

4 str.slice(start,end) 不改变原字符串,返回一个新的字符串 ,包括起始位置,不包括end位置,end省略则直到字符串末尾;-1表示最后一个字符;和substr(start,end) substring(start,stop)效果类似

注意索引值从0 开始 包括起始位置字符,不包括结尾的字符

1
2
3
var str = "abcdef";
console.log(str.substring(1));//bcd
console.log(str.slice(1));//bcd

5 str.split(seperate,howmany) : 不改变原字符串,返回一个数组 ,该数组中保存了被分割的字符串,howmany设置数组中的元素的个数;

1
2
3
4
5
6
7
8
9
10
11
var str = 'www.baidu.com?name=Jhon&age=15';
console.log(str.indexOf('?'));
var newArr = str.slice(str.indexOf('?')+1).split('&');
console.log(newArr);
console.log(newArr[0].substring(0,4));
console.log(newArr[0].substring(5,9));
for(var i = 0 ; i < newArr.length ; i++){
if(newArr[i].substring(0,5) == 'name='){
document.write('<p>welcome '+newArr[i].substring(5,9)+'</p>')
}
}

6 str.concat(str1,str2····) : 不改变原字符串,返回一个新的字符串;

7 正则 str.match(value) str.match(regexp) 不改变原来的字符串,找到匹配则返回匹配的数组 ,找不到匹配则返回null

match() 方法将检索字符串 stringObject,以找到一个或多个与 regexp 匹配的文本。这个方法的行为在很大程度上有赖于 regexp 是否具有标志 g。

如果 regexp 没有标志 g,那么 match() 方法就只能在 stringObject 中执行一次匹配。如果没有找到任何匹配的文本, match() 将返回 null。否则,它将返回一个数组,其中存放了与它找到的匹配文本有关的信息。该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。除了这些常规的数组元素之外,返回的数组还含有两个对象属性。index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。

如果 regexp 具有标志 g,则 match() 方法将执行全局检索,找到 stringObject 中的所有匹配子字符串。若没有找到任何匹配的子串,则返回 null。如果找到了一个或多个匹配子串,则返回一个数组。不过全局匹配返回的数组的内容与前者大不相同,它的数组元素中存放的是 stringObject 中所有的匹配子串,而且也没有 index 属性或 input 属性。

注意:在全局检索模式下,match() 即不提供与子表达式匹配的文本的信息,也不声明每个匹配子串的位置。 如果需要这些全局检索的信息,可以使用 RegExp.exec()。

1
2
3
4
5
var str = 'av fgf df';
console.log(str.match('f'));//["f", index: 3, input: "av fgf df"] 返回一个数组,包含匹配字符的详细信息
console.log(str.match('f')[0]);//f
console.log(str.match('f').index);//3
console.log(str.match(/f/g));//["f", "f", "f"]

8 正则 str.replace(str/regexp , replacement | function) ; 不改变原字符串,返回一个新的字符串

8.1 如果 regexp 具有全局标志 g,那么 replace() 方法将替换所有匹配的子串。否则,它只替换第一个匹配子串。

1
2
3
4
var str = "Jhon Jim";
var newStr = str.replace(/J/,'G')
console.log(str);//"Jhon Jim"
console.log(newStr);//"Ghon Jim"
1
2
3
4
var str = "Jhon Jim";
var newStr = str.replace(/J/g,'G')
console.log(str);//"Jhon Jim"
console.log(newStr);//"Ghon Gim"

8.2 $ 1,2,3,4……99 表示与正则表达式第1 到99个子表达式相匹配的文本;子表达式是用( )括起来的那部分

1
2
3
var name = "Doe, John";
var newName = name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
console.log(newName);//John Doe

8.4 如果replace第二个参数没有传递,那么默认传入undefined

1
console.log('str'.replace('r')); //stundefined

9 str.trim( ) 方法可以用来去掉字符串中的前面和后面的空格,底层实现

1
2
3
4
String.prototype.trim = String.prototype.trim || function(){
if(!this) return this;
return this.replace(/^\s+|\s+$/g,"");//使用正则表达式将空格替换为空字符串
}

记住,String 对象的所有属性和方法都可应用于 String 原始值上,因为它们是伪对象。