【ES6】字符串扩展

字符串

一、字符串的遍历接口 for...of

ES6 为字符串添加了遍历器接口,字符串可以被 for...of 循环遍历

二、字符串的新增方法

查找字符串中是否包含指定字符串:

includes

startsWith

endsWith

字符串匹配:

matchAll 内容匹配

replaceAll 替换内容

消除空格:

trimStart

trimEnd

复制字符串:

repeat

补全字符串长度:

padStart

padEnd

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 正规化。

补充:ES6 出现之前,字符串对象共有 4 个方法,可以使用正则表达式:match()、replace()、search() 和 split()

match

replace

search

split

posted @ 2021-10-22 17:12  等等啦  阅读(73)  评论(0)    收藏  举报