字符串是由双引号或单引号引起的字符序列。推荐使用单引号。双引号一般用于含有变量的字符串。
String 全局对象是一个用于字符串或一个字符序列的构造函数。
字符串语法
直接量定义
var str = 'string text'
var str = "string text"
var str = "中文/汉语"
var str = "español"
var str = "English "
var str = "हिन्दी"
var str = "العربية"
var str = "português"
var str = "বাংলা"
var str = "русский"
var str = "日本語"
var str = "ਪੰਜਾਬੀ"
var str = "한국어"
console.log(typeof str); // 控制台输出string
构造函数定义时,此时typeof str
返回的是一个string
对象。
构造函数定义字符串
var str = new String("哈哈");
console.log(typeof str); // 控制台输出object
构造函数定义时,此时typeof str
返回的是一个object
对象。
字符串API
charAt(index)
输出字符串索引为index
的字符。var str = "hello world"; console.log(str.charAt(1)); // 控制台输出 e
charCodeAt(index)
对应位置上的字符编码(ASCII)。var str = "hello world"; console.log(str.charCodeAt(1)); // 控制台输出 101
String.fromCharCode(code)
通过ASCII编码返回相应字符。console.log(String.fromCharCode(101)); // 控制台输出 e
indexOf(string)
查找string
变量(子字符串)第一次出现的位置,如果未找到则返回-1;var str = "hello world"; console.log(str.indexOf("world")); // 第一次出现的索引为6
lastIndexOf(String)
查找String
变量字符串最后一次出现的位置。返回值始终是从左到右的索引。为找到仍然返回-1;var str = "world hello world"; console.log(str.lastIndexOf("orld")); //控制台输出13;
substr(start,length)
、substring(start,end)
与str.slice(beginIndex[, endIndex])
这三个函数都是字符串截取的操作。substr(start,length)
与substring(start,end)
的区别是,所传参数不同。返回值为截取的字符串。substr(start,length)
是从start
索引开始截取,截取的长度length
的字符串。如果length
不传,则截取start
后所有的字符串。
var str = "good good study!"; console.log(str.substr(0,3)); // 输出 goo
substring(start,end)
使用start
索引开始截取,截取到字符串的end
索引。如果end
索引不传,则截取start
后所有的字符串。如果start>end,函数仍然可以正常运行,因为JS内部将end重新复制给start,start重新赋值给end。大小进行了相互交互。同时也与数组一样前包后不包!
var str = "good good study!"; console.log(str.substr(0,4)); //控制台输出 good.
str.slice(beginIndex[, endIndex])
与数组slice(beginIndex,endIndex)
一致。从一个字符串中提取字符串并返回新字符串。在一个字符串中的改变不会影响另一个字符串。也就是说,slice 不会修改原字符串(只会返回一个包含了原字符串中部分字符的新字符串)。传入负值索引,此时字符串将从右至左开始截取字符串。如果所处啊值为负数,小的负数必须放在第一位,否则将输出空字符串
var str = "good good study!"; console.log(str.slice(-3,-1)); //控制台输出 dy.
split(separator)
将字符串以separator
变量的分隔符切割成一个数组。与数组的APIjoin(separator)
可以进行相互转换。var str = "good good study!"; console.log(str.split(" ")); // 控制台输出 [ 'good', 'good', 'study!' ]
replace(pattern,replaceStr)
字符串替换,pattern
替换规则(可以为字符串亦可为正则表达式),replaceStr
需要替换成新的字符串。默认替换一次!返回值为新的字符串!var str = "good good study!"; // 普通字符串 console.log(str.replace("good","****")); // 输出 **** good study! // 正则表达式 console.log(str.replace(/good/g,"****")); // 输出 **** **** study!
扩展
replace
上面简单提到关于正则部分如何使用。完成的replace函数参数形式可以是
string.replace(patter|regex,newStr|function(){});
- pattern需要替换的字符串
- regex需要替换的字符串表达式
- newStr替换的字符串
function(){}
执行替换时的操作函数。
这里主要讲解function(){}
时的用法。以及各个参数的含义:
// 需要替换的字符串
var num = "ha 1234 5678 12121";
// 使用正则表达式
var newNum = num.replace(/(\d{4}) (\d{4})/g,(matchStr,p1,p2,offset,string)=>{
// matchStr代表匹配到的字符串完整的字符串
console.log(matchStr);
// p1 代表正则表达式中的第一个中括号匹配到的内容。
console.log(p1);
// p2 代表正则表达式中的第二个中括号匹配到的内容。
console.log(p2);
// offset代表匹配到的索引位置
console.log(offset);
// string代表源字符串
console.log(string);
// 进行的相关操作。
var newStr = ......
// 返回操作后的字符串
return newStr;
});
console.log();
// 使用字符串
var newNum = num.replace("1234",(matchStr,offset,string)=>{
// 匹配到的完整字符串
console.log(matchStr);
// offset代表匹配到的索引位置
console.log(offset);
// string代表源字符串
console.log(string);
// 进行的相关操作。
var newStr = ......
// 返回操作后的字符串
return newStr;
});
控制台输出:
[Running] node "/Users/ermao/Development/learn_code/javascript/String.js"
1234 5678
1234
5678
3
ha 1234 5678 12121
1234
3
ha 1234 5678 12121
[Done] exited with code=0 in 0.053 seconds
【举例】
var num = "ha 1234 5678 12121";
var newNum = num.replace(/(\d{4}) (\d{4})/g,(matchStr,p1,p2,offset,string)=>{
console.log(matchStr);
console.log(p1);
console.log(p2);
console.log(offset);
console.log(string);
return p2+"-"+p1;
});
console.log("输出替换后的字符串:"+newNum);
控制台输出
[Running] node "/Users/ermao/Development/learn_code/javascript/String.js"
1234 5678
1234
5678
3
ha 1234 5678 12121
输出替换后的字符串:ha 5678-1234 12121
[Done] exited with code=0 in 0.044 seconds
思考
- "abcdefg"转为"gfedcba"逆序字符串。
var str = "abcdefg"; // 逆序 var str = str.split("").reverse().join(""); console.log(str);