字符串的属性
length
1 | var str = "Hello world!" |
字符串的方法
charAt() 和 charCodeAt()
语法:
strObj.charAt(index)
- index:必需。表示字符串中某个位置的数字,即字符在字符串中的下标。
- 返回值:String,返回该位置的字符。
1 | var str = "Hello world!" |
语法:
strObj.charCodeAt(index)
- index 必需。表示字符串中某个位置的数字,即字符在字符串中的下标。
- 返回值:Number,返回该位置字符的 Unicode 十进制编码。
1 | var str = "Hello world!" |
字符是按顺序编码的:
- 大写字母的编码是从 65 开始的,字母 A 的编码是 65,B 的编码是 66…
- 小写字母是从 97 开始的,字母 a 的编码是 97,b 的编码是 98…
- 数字的编码是从 48 开始的,0 对应的编码是 48,9 对应的编码是 57…
indexOf()和lastIndexOf()
语法:
strObj.indexOf(searchvalue, fromindex)
- searchvalue 必需。规定需检索的字符串值。
- fromindex 可选。整数参数,规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。
- 返回值:Number, 子串在字符串中的位置,以 0 为基础
1 | var str = "Hello, jeremy. How are you jeremy"; |
语法:
strObj.lastIndexOf(searchvalue, fromindex);
- 语法同上,唯一的区别是 lastIndexOf() 从字符串的结尾或指定位置向开头查找。
1 | str.lastIndexOf('jeremy'); // 27 |
substr()、substring()和slice()
substr() 和 substring() 均用来提取一个子串,但它们需要的参数不同。
substr() (不建议使用)
语法:
strObj.substr(start, length);
- start 必需。提取子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
- length 可选。子串中的字符数。必须是数值。如果省略了该参数,那么返回从起始下标到结尾的字串。
- 返回值:String, 提取的子串
1 | var str = "JavaScript"; |
参数 length 原则上不能为负数,若强行传递负数,会被当成 0 处理,那么该方法返回的就是一个空串(即长度为 0 的字符串)。
substring()
语法:
strObj.substring(start, stop)
- start 必需。一个非负的整数,提取子串的起始下标。
- stop 可选。一个非负的整数,提取子串的结束下标+1。如果省略该参数,那么返回的子串会一直到字符串的结尾。
- 返回值: String, 提取的子串
1 | str.substring(0,4); // "Java" |
stop 的数值可以比 start 小,该情况与 str.substring(stop, start) 情况相同
1 | str.substring(4,0); // "Java" |
原则上参数不能为负数,若强行传负数,在执行时会被当成 0 处理。
1 | str.substring(3,-1); // "Jav" |
slice()
语法:
strObj.slice(start, end);
- start 必需。必须是数值,提取子串的起始下标。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
- end 可选。提取子串的结束下标+1。若未指定此参数,则要提取的子串包括 start 到原字符串结尾的字符串。如果该参数是负数,那么它规定的是从字符串的尾部开始算起的位置。
- 返回值: String,一个新的字符串,值与提取的子串相同。
注:slice() 和 substring() 的区别在于 slice() 接受负数参数。
1 | var str = "JavaScript"; |
concat()
字符串的拼接
语法:
str.concat(string2[, string3, …, stringN])
1 | var hello = 'Hello, '; |
1 | var greetList = ['Hello', ' ', 'Venkat', '!']; |
toUpperCase()和toLowerCase()
大小写转换
1 | var str = "I Don't Care About Case"; |
split()
把一个字符串分割成数组,原字符串不会被改变。
语法:
str.split(separator, howmany)
- separator 必需。字符串或正则表达式,从该参数指定的地方分割 str。
- howmany 可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
- 返回值:String,分割后的数组。
1 | var str1 = "a,1,b,2,c,3"; |
注:每个分割符代表着数组中的一个元素,上述情况最后一个元素是空字符串
replace()
用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串,原字符串不会被改变。
语法:
str.replace(regexp/substr, replacement)
- regexp/substr 必需。规定子字符串或 RegExp 对象
- replacement 可选。替换文本,可以是字符串,也可以是函数
- 返回值:String,替换文本后的字符串
1 | var str3 = "This is an red apple."; |
注:如果正则表达式中具有全局标志 g,那么 replace() 方法将替换所有匹配的子串,否则只替换第一个匹配子串。
如果 replacement 为函数,则函数对应的参数:
1 | str.replace(regexp, function(eachStr [, eachSubstr1, eachSubstr2 ...] [, eachStrIndex1, eachStrIndex2, ..] [, str]){ |
- eachStr 每个匹配的字符串
- eachSubstr 每个匹配的子字符串(正则表达式中的小括号分组)
- eachStrIndex 整数,每个匹配的字符串出现的位置
- str 原字符串
- 返回值:String, 被替换的字符串
1 | console.log(str3.replace(/is/g, function(str){ |
1 | console.log(str3.replace(/(i)s/g, function(str, substr, index, originStr){ |
注:子字符串是指正则表达式中的小括号的分组内容
1 | console.log(str3.replace(/(i)(s)/g, function(a,b,c,d,e,f){ |
参数个数是严格根据正则表达式来的,上例中只有两个分组,因此只有 b、c 两个参数用来匹配子字符串,而参数 f 因为没有对应的内容而显示 undefined。
replacement 中的 \$ 字符具有特定的含义。如下表所示,它说明从模式匹配得到的字符串将用于替换。
- $1、$2、…、$99:与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
- $&:与 regexp 相匹配的子串。
- $`:位于匹配子串左侧的文本。
- $’:位于匹配子串右侧的文本。
- $$:$ 符号。
1 | var str4 = 'abcd' |
其中,
$1: c
$2: undefined
$&: c
$`: ab
$’: d
search()
检索子字符串,或与正则表达式相匹配的子字符串,原字符串不会被改变。
语法:
str.search(substr/regexp)
- substr/regexp:子字符串或 RegExp 对象
- 返回值:Number, 子字符串第一次出现的位置,如果不含该子字符串,则返回 -1
1 | var str5 = "abcdecfCg"; |
注:search() 方法不执行全局匹配,它将忽略标志 g
1 | console.log(str5.search(/C/)); // 7 |
match()
检索子字符串,或与正则表达式相匹配的子字符串。原字符串不会被改变
语法:
str.match(substr/regexp)
- substr/regexp:子字符串或 RegExp 对象
- 返回值:
- 如果参数是substr或regexp(非全局匹配),则返回数组:[subStr, groupStr_1, groupStr_2, … index, input]
- subStr: 与表达式相匹配的字符串
- groupStr_i: 与第 i 个子表达式相匹配的字符串
- index: 匹配的字符串第一次出现的位置
- input: 原字符串
- 如果参数是substr或regexp(非全局匹配),则返回数组:[subStr, groupStr_1, groupStr_2, … index, input]
- 如果参数是regexp(全局匹配),则返回一个包含所有匹配子串的数组(没有index属性或input属性)
1 | var str6 = "abcdecfCg"; |