【ES6】字符串扩展
字符串
一、字符串的遍历接口 for...of
ES6 为字符串添加了遍历器接口,字符串可以被 for...of 循环遍历
二、字符串的新增方法
查找字符串中是否包含指定字符串:
字符串匹配:
matchAll 内容匹配
replaceAll 替换内容
消除空格:
复制字符串:
补全字符串长度:
1. 查找字符串中是否包含指定字符串
includes
是否找到了参数字符串,返回 true / false
startsWith
是否以参数字符串开头,返回 true / false
endsWith
是否以参数字符串结尾,返回 true / false
const str = "我是小新的朋友,我叫风间。";
str.includes("朋友"); // true
str.endsWith("。"); // true
str.includes("朋友", 7); // false(7 表示从第7个位置开始搜索,即从逗号到字符串结束之间搜索)
str.startsWith(",", 7); // true (同上)
str.endsWith("小新", 4); //true(4 表示前4个位置上,即子串“我是小新”)
这三个方法都支持第二个参数,includes、startsWith 的第二个参数表示开始搜索的位置。endsWith 的第二个参数 n 表示前 n 个位置(包括 n)。
补充: indexOf() 和 lastIndexOf() 这两个方法是查找字符首次出现的位置,不存在则返回 -1 。
2. 字符串匹配
matchAll
返回一个正则表达式在当前字符串的所有匹配。
补充: match() 查找字符串中特定的字符,存在则返回该字符,不存在则返回 null 。
replaceAll
一次性替换所有匹配。用法同 replace() ,返回一个新字符串,不会改变原字符串。
补充:replace() 只能替换第一个匹配。如果要替换所有的匹配,不得不使用正则表达式的 g 修饰符。
"大大怪".replace("大", "小"); // 小大怪(只将第一个 “大” 替换成了 “小” )
"大大怪".replace(/大/g, "小"); // 小小怪(使用正则表达式中的 g 修饰符,将 “大” 全局替换成 “小” )
"大大怪".replaceAll("大", "小"); // 小小怪
replaceAll() 第一个参数可以是字符串,也可以是带有 g 修饰符的正则表达式。如果是正则表达式,但没有 g 修饰符,会报错。
这点与 replace() 不同,replace() 正则表达式不带 g 修饰符,不会报错。
第二个参数是一个字符串,表示替换的文本,其中可以使用一些特殊字符串:
// $&:
// $`:
// $':
// $n:
// $$:指代美元符号$
"大大怪将军".replaceAll("大", "$$"); // $$怪将军(将所有的 “大” 替换成美元符号 $ )
第二个参数还可以是函数:
3. 消除空格
trimStart
只消除字符串头部的空格。别名:trimLeft()
trimEnd
只消除字符串尾部的空格。别名:trimRight()
trimStart() 和 trimEnd() 返回的都是新字符串,不会修改原始字符串。除了空格键,这两个方法对字符串头部(或尾部)的 tab 键、换行符等不可见的空白符号也有效。
补充: trim() 消除字符串前后空格。
4. 复制字符串
repeat
将字符串重复 n 次,并返回新字符串。
- 参数为 0,则返回空字符串。
- 参数为负数或者 Infinity 则会报错。
- 参数是字符串,则会先转换成数字。
- 参数为小数,会先取整。
- 参数是 0 到-1 之间的小数,则等同于 0(先取整:-0, 视为 0)。
const str = "哈";
str.repeat(3); // 哈哈哈
str.repeat(0); // ""
str.repeat(NaN); // ""
str.repeat("5"); // 哈哈哈哈哈(参数为字符串,会先将其转为数字)
str.repeat("ha"); // ""
5. 补全字符串长度
padStart
用于头部补全长度。
"09-12".padStart(10, "YYYY-MM-DD"); // "YYYY-09-12"
padStart() 常见用途是为数值补全指定位数,另一个用途是提示字符串格式。
padEnd
用于尾部补全长度。
padStart() 和 padEnd() 一共接受两个参数,第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。
"a".padStart(3, "b"); // "bba"
"a".padEnd(3, "b"); // "abb"
"a".padStart(2); // " a"(如果没有第二个参数,则默认使用空格补全)
"abcd".padStart(2, "e"); // "abcd"(如果原字符串:abcd 的长度等于或大于指定最大长度:2 ,则补全无效,返回原字符串:abcd )
"AB".padEnd(4, "CDEFG"); // "ABCD"(如果原字符串:AB 补上指定字符串:CDEFG 后的新字符串:ABCDEFG 长度大于指定最大长度:4 ,则会截断,返回符合指定最大长度的新字符串:ABCD )
补充:不常用的方法:
- String.fromCodePoint() 用于从 Unicode 码点返回对应字符,该方法定义在 String 对象上。
- String.raw() 该方法返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,往往用于模板字符串的处理方法。
- codePointAt() 能够正确处理 4 个字节储存的字符,返回一个字符的码点。正确返回 32 位的 UTF-16 字符的码点。测试一个字符由两个字节还是由四个字节组成的最简单方法。
- normalize() 用来将字符的不同表示方法统一为同样的形式,这称为 Unicode 正规化。