文章目录
前言
本文基于阮一峰的ES6编写,在此只介绍一些常用的。
includes()、startsWith()、endsWith()
本来Js中只有`indexOf`方法可以用来确定一个字符串是否包含在另一个字符串中。ES6中又新增了三种新方法。
includes()
返回布尔值,表示是否找到了参数字符串。
let str = 'abcde'
str.includes('a') //true
支持第二个参数,表示开始搜索的位置
let str = 'abcdef'
str.includes('a',2) //false
上述表示从字符串的第三个位置到最后是否存在字符串a
,很显然不存在。
startsWith()
返回布尔值,表示参数字符串是否再源字符串的头部
let str = 'abcdef'
str.startsWith('abc') // true
上述代码表示字符串abc
是否在字符串的首部。
let str = 'abcdefg'
str.startsWith('abc',2) //false
上述代码意为从下标为2的字符开始到最后的这段字符串中,是否以字符串abc
开头。
endsWith()
返回布尔值,表示参数字符串是否在源字符串的尾部
let str = 'abcdefg'
str.endsWith('fg') //true
str.endsWith('fg',4) //false
endsWith()
方法的第二个参数与其他两个略有不同,指的是前n
个字符,如上,最后一句意为在源字符串中的前4个字符组成的字符串即'abcd'
是否是以'fg'
结尾的。
repeat()
返回一个新字符串,将原字符串重复n次
'x'.repeat(3) // "xxx" ①
'x'.repeat(2.9) // "xx" ②
'x'.repeat(0) // "" ③
'x'.repeat(-0.9) // "" ④
'x'.repeat(NaN) // "" ⑤
'x'.repeat('3') // "xxx" ⑥
'x'.repeat(-1) //RangeError ⑦
如果参数是一个小数,那么会先取整(②);如果参数是-1到0之间的小数,取值为0(④),如果是负数或是Infinity,会报错(⑦);如果是NaN,等同于0(⑤),如果是字符串会先转换为数字(⑥)。
trimStart()、trimEnd()
trim()方法会消除掉字符串的首尾空格,trimStart()方法和trimEnd()方法,分别会消除字符串的首部和尾部的空格。
let str = ' ab c d '
str.trim() // "ab c d"
str.trimStart() // "ab c d "
str.trimEnd() // " ab c d"
replaceAll()
一次性替换所有匹配项,返回一个新字符串,不会改变原字符串。
'aabbcc'.replaceAll('a','pp') //"ppppbbcc"
第一个参数可以是一个字符串,也可以是一个全局的正则表达式且必须是一个全局的,否则报错。
'aabbcc'.replaceAll(/a/g,'pp') //"ppppbbcc"
'aabbcc'.replaceAll(/a/,'pp') //报错
函数的第二个参数除了为字符串,也可以是一个函数,该函数的返回值将替换掉第一个参数匹配的文本
'aabbcc'.replaceAll('a',()=> 'pp') // "ppppbbcc"
这个替换函数可以接受多个参数,第一个参数是捕获到的匹配内容,第二个参数捕捉到是组匹配(有多少组匹配,就有多少个对应的参数)。此外,最后还可以添加两个参数,倒数第二个参数是捕捉到的第一个内容在整个字符串的位置,最后一个参数是原字符串。
const str = '123abc456';
const regex = /(\d+)([a-z]+)(\d+)/g;
function replacer(match, p1, p2, p3, offset, string) {
console.log(offset)
return [p1, p2, p3].join(' - ');
}
str.replaceAll(regex, replacer)
// 0 (log)
// "123 - abc - 456"
借鉴字符串的新增方法