ES5
检索字符串
indexOf
与数组方法类似。
stringObject.indexOf(searchvalue,fromindex)
fromindex规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。
lastIndexOf
与indexOf相反。
indexOf和lastIndexOf方法对大小写敏感!
截取字符串
slice(start, end)
- start,要抽取的片断的起始下标,如果为负,则从尾部算起。
- end,要抽取的片段的结尾的下标,如果为负,则从尾部算起。
String.slice() 与 Array.slice() 相似
substring(start, stop)
- start必需。要抽取的片断的起始下标,不能为负。
- stop可选。比要提取的子串的最后一个字符的位置多1,不能为负。
如果参数 start 与 stop 相等,那返回一个空串。
如果 start 比 stop 大,那在提取子串之前会先交换这两个参数。
如果同时为负,则返回空串。
如果一个值为负,则转为0,而且如果start 比 stop 大,会交换值。
substr(start, length) --不推荐
- start,要抽取的片断的起始下标,如果为负,则从尾部算起。
- length,如果为负,则转为0。
trim(),trimLeft(),trimRight()
去除首尾空格。
正则相关
split
把一个字符串分割成字符串数组。
stringObject.split(separator, howmany) //separator必需,字符串或正则表达式
var str="How are you doing today?";
str.split(/\s+/); //"How", "are", "you", "doing", "today?"
如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
String.split() 执行的操作与 Array.join 执行的操作是相反的。
match
可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。
stringObject.match(searchvalue | reg)
字符串检索
var str="Hello world!";
str.match('w'); //["w", index: 6, input: "Hello world!", groups: undefined]
正则检索
// 全局匹配
var str="1 plus 2 equal 3";
str.match(/\d+/g); //["1", "2", "3"]
var str="1 plus 2 equal 3";
str.match(/\d+/); //["1", index: 0, input: "1 plus 2 equal 3", groups: undefined]
replace
用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
stringObject.replace(reg | substr, replacement)
字符串替换
'aaaccc'.replace('ccc', 'b'); //'aaab'
'aaaccc'.replace('bbb', 'b'); //'aaaccc'
'aaaccc'.replace('a', 'b'); //"baaccc"
正则替换
'aaaccc'.replace(/\w/, 'b') //"baaccc"
//全局匹配
'aaaccc'.replace(/\w/g, 'b') //"bbbbbb"
replacement
replacement 可以是字符串,也可以是函数。但是 replacement 中的 $ 字符具有特定的含义。
字符 | 替换文本 |
---|---|
字符 | 替换文本 |
$1、$2、...、$99 | 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。 |
$& | 与 regexp 相匹配的子串。 |
$` | 位于匹配子串左侧的文本。 |
$' | 位于匹配子串右侧的文本。 |
$$ | 直接量符号。 |
'aa123BB'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$1'); // "aa"
'aa123BB'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$4'); // "$4"
'aa123BB'.replace(/([a-z]+)(\d+)([A-Z]+)/g, '$&'); //"aa123BB"
'aa123BB'.replace(/(\d+)/g, '$`'); //"aaaaBB"
'aa123BB'.replace(/(\d+)/g, "$'"); //"aaBBBB"
'aa123BB'.replace(/(\d+)/g, '$$'); //"aa$BB"
ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。
'aaaccc'.replace(/\w/g, function() {
return 'b';
});
//"bbbbbb"
'aaaccc'.replace(/\w/, function() {
return 'b';
});
//"baaccc"
search
stringObject.search(searchvalue | reg)
'aaaccc'.search('ccc'); //3
'aaaccc'.search(/ccc/); //3
var str="Visit W3School!";
str.search(/W3School/); //6
search() 对大小写敏感
其他
- big() 用大号字体显示字符串。
- blink() 显示闪动字符串。
- bold() 使用粗体显示字符串。
- sup() 把字符串显示为上标。
- sub() 把字符串显示为下标。
- strike() 使用删除线来显示字符串。
- small() 使用小字号来显示字符串。
- charAt() 返回在指定位置的字符。
- charCodeAt() 返回在指定的位置的字符的 Unicode 编码。
- toLocaleLowerCase() 把字符串转换为小写。
- toLocaleUpperCase() 把字符串转换为大写。
- toLowerCase() 把字符串转换为小写。
- toUpperCase() 把字符串转换为大写。
- toSource() 代表对象的源代码。
- toString() 返回字符串。
- valueOf() 返回某个字符串对象的原始值。
ES6
includes(), startsWith(), endsWith()
- includes(searchValue, start):返回布尔值,表示是否找到了参数字符串。
- startsWith(searchValue, start):返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith(searchValue, start):返回布尔值,表示参数字符串是否在原字符串的尾部。
let s = 'Hello world!';
s.startsWith('world', 6); // true
s.endsWith('Hello', 5); // true
s.includes('Hello', 6); // false
s.includes('o'); // true
repeat(value)
返回一个新字符串,表示将原字符串重复n次。
- 如果value数是负数或者Infinity,会报错。但是,如果参数是 0 到-1 之间的小数,则等同于 0。
- 如果value是字符串,则会先转换成数字。
- value为NaN等同于 0。
- value如果是小数,会被取整。
'a'.repeat(3); // "aaa"
'a'.repeat(-1); //VM449:1 Uncaught RangeError: Invalid count value
'a'.repeat('3n'); //""
'a'.repeat('3'); //"aaa"
'a'.repeat(NaN); //""
'a'.repeat(1.6); //"a"
padStart(),padEnd()
- padStart(length, string)用于头部补全。
- padEnd(length, string)用于尾部补全。
'aaa'.padStart(2, 'ab'); //"aaa"
'aaa'.padStart(10, '0123456789'); //"0123456aaa"
'aaa'.padStart(10) //" aaa"
'aaa'.padEnd(6, 'cd') //"aaacdc"
模板字符串
模板字符串(template string)是增强版的字符串,用反引号(`)标识。
let name = "Bob", time = "today";
`Hello ${name}, how are you ${time}?` //"Hello Bob, how are you today?"
模板字符串中嵌入变量,需要将变量名写在${}之中。
JS表达式,可以进行运算,以及引用对象属性
let x = 1;
let y = 2;
`${x} + ${y} = ${x + y}` //"1 + 2 = 3"
var obj = { a: 'eee'}
`obj ${obj}` //"obj [object Object]"
调用函数
function fn() {
return "Hello World";
}
`foo ${fn()} bar` //"foo Hello World bar"
标签模板
模板字符串可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串。这被称为“标签模板”功能(tagged template)。
alert`123`; 等同于alert(123);
如果模板字符里面有变量,就不是简单的调用了,而是会将模板字符串先处理成多个参数,再调用函数。
let a = 5;
let b = 10;
function tag(s, v1, v2) {
console.log(s);
console.log(v1);
console.log(v2);
return "OK";
}
tag`Hello ${ a + b } world ${ a * b}`;
// 等同于 tag(['Hello ', ' world ', ''], 15, 50);
//["Hello ", " world ", "", raw: Array(3)]
//15
//50
//"OK"