4.字符串新增方法

1.方法:includes(),startsWith(),endWith()

  includes():返回布尔值,作用:判断是否找到需要查找的字符(串)

   startsWith():返回布尔值,作用:判断参数字符(串)是否在原字符串的头部

   endWith():返回布尔值,作用:判断参数字符(串)是否在原字符串的尾部

  具体例子如下:

let a = "hello world!"
console.log(a.includes("llo"));//true
console.log(a.startsWith("hel"))//true
console.log(a.endsWith("ld!"))//true

  这些方法支持第二个参数,例下:

1 let a = "hello world!"
2 console.log(a.includes("llo",2));//true      从第二个位置到结束是否存在满足条件的
3 console.log(a.startsWith("hel",0))//true    从第0个位置到结束是否存在满足条件的
4 console.log(a.endsWith("ld!",12))//true        前12个字符是否存在满足条件的

2.方法:repeat()

  repeat():指将原字符串进行重复多少次再返回,不会改变原数据。例下:

let a = "hello"
a.repeat(2)
console.log(a);//hello
console.log(a.repeat(2));//hellohello

   参数为小数时,会被取整(统一向下取整)。

console.log("hello".repeat(1.6));//hello
console.log("hello".repeat(2.4));//hellohello

   参数为负数(<-1)或Infinity时,repeat会报错,在(-1~0)之间时,取0。

1 console.log("hello".repeat(-0.7));// "" 不会报错
2 console.log("hello".repeat(-1.5));// Invalid count value: -1.5 at String.repeat;// Invalid count value: -1.5 at String.repeat 
3 console.log("hello".repeat(Infinity));// Invalid count value: Infinity at String.repeat

  参数为NaN时,取0。

console.log("hello".repeat(NaN));// "" 不会报错

  参数为字符串时,会将字符串转为数字,转不了时取0。

console.log("hello".repeat("lalala"));// "" 不会报错
console.log("hello".repeat("2"));// "hellohello" 

3.方法:padStart(),padEnd()

  ES2017(ES8)引入了字符串长度补全的功能。padStart()头部补全,padEnd()尾部补全。

console.log("hello".padStart(10,"1"));//11111hello
console.log("hello".padEnd(10,"1"));//hello11111
    
//补齐字符长度过长,超出规定长度会被裁切
console.log("hello".padStart(10,"123456789"));//12345hello
console.log("hello".padEnd(10,"123456789"));//hello12345
    
//规定长度小于原字符串长度,不会补齐也不会裁切
console.log("hello".padStart(3,"123456789"));//hello
console.log("hello".padEnd(3,"123456789"));//hello

  上述代码,会发现padStart(),padEnd()有两个参数,第一个参数规定了字符长度,第二个参数为补齐的字符串。在需要补齐的字符串超出规定字符长度时,补齐字符会被裁切。在规定字符小于原字符串长度时,不会补齐也不会裁切。

 在省略第二个参数时,补齐参数会默认为空格补齐。如下

console.log("hello".padStart(10));//     hello
console.log("hello".padEnd(10));//hello     

4.方法:trimStart(),trimEnd(),trim()

  ES2019(ES20)对字符串新增了trimStart(),trimEnd()这两个方法。它们与trim()作用一致,trimStart()用来消除字符串头部的空格,trimEnd()用来消除字符串尾部空格。

console.log("   hello   ".trim())//'hello'
console.log("   hello   ".trimStart())//​'hello   '
console.log("   hello   ".trimEnd())//​'    hello'

 

  值得注意的是不仅可以清除空格,对于字符串头部、尾部的tab、换行产生的空白字符也可以清除。

  我们在代码中使用trim(),会发现他还有两个方法。trimLeft()是trimStart()的别名,trimRight()是trimEnd()的别名,作用是一样的。

5.方法:replaceAll()

  ES2021引入了replaceAll()方法,为了解决replace()只能替换匹配第一个满足条件的字符,增加了这个可以全局替换的方法。如下

console.log("hell,world!".replace("l","z"))//hezl,world!   只会替换第一个l,对后面的l不进行替换
console.log("hell,world!".replaceAll("l","z"))//hezz,worzd!   会将字符串中所有l都替换为z

  在没有replaceAll()方法时,我们全局替换一般使用正则替换。如下

1 console.log("hell,world!".replace("l","z"))//hezl,world!
2 console.log("hell,world!".replace(/l/g,"z"))//hezz,worzd!
3 console.log("hell,world!".replace(/l/,"z"))//hezl,world!  
4 console.log("hell,world!".replaceAll("l","z"))//hezz,worzd!   
5 console.log("hell,world!".replaceAll(/l/g,"z"))//hezz,worzd!   
6 console.log("hell,world!".replaceAll(/l/,"z"))//String.prototype.replaceAll called with a non-global RegExp argument at String.replaceAll

  注意:replaceAll()在使用正则时,如果不加g,会报错。

  replaceAll(匹配字符,替换字符)第二个参数表示替换字符,可以使用一些特殊的字符串进行替换。如下

    $&:匹配的字符串(将匹配的字符串替换为匹配的字符串,就是原样返回   0.0一脸懵)。

    $`:匹配结果前面的文本(每次匹配都是将匹配字符替换为当前匹配字符位置前面的字符串)

    $‘:匹配结果后面的文本(每次匹配都是将匹配字符替换为当前匹配字符位置后面的字符串)

    $n:匹配成功的第n组内容,n从1开始,这个参数生效的前提是,匹配字符必须为正则表达式

    $$:指美元符号$

  例子如下:

console.log("hello".replaceAll("l","$&"))//"hello"    $&这里指"l",也就是将l替换为l,返回数据不变
console.log("hello".replaceAll("l","$`"))//"hehehelo"    在匹配第一个"l"时,"$`"指第一个"l"之前的数据,为"he",在匹配第二个"l"时,"$`"指第二个"l"之前的数据,为"hel"
console.log("hello".replaceAll("l","$'"))//"helooo"      在匹配第一个"l"时,"$`"指第一个"l"之后的数据,为"lo",在匹配第二个"l"时,"$`"指第二个"l"之后的数据,为"o"
console.log("hello".replaceAll("l","$n"))//"he$n$no"    使用"$n"第一个参数必须为正则,不为正则着不会解析"$n"
console.log("hello".replaceAll(/(he)(ll)/g,"$2$1"))//"llheo"    这里"$1"指的是"he","$2"指的是"ll",意为将第一个匹配的"he"更换为"$2"表示的"ll",将第二个匹配的"ll"更换为"$1"表示的"he"
console.log("hello".replaceAll("l","$$"))//"he$$o"      "$$"指美元$,"l"替换为"$"

  replaceAll()第二个参数也可以为一个函数,函数返回值为替换字符。

  这个函数的参数可以为多个,第一个参数为捕捉到的匹配内容,第二个参数捕捉到是组匹配(有多少个组匹配,就有多少个参数),后面还有两个参数,倒数第二个参数为捕捉到的内容在真个字符串中的位置,最后一个参数为原字符串。

 1 console.log("hello".replaceAll("l",()=>{return "z"}))//"hezzo"
 2 let text = "hello";
 3 function replaceFun(match,val1,val2,val3,index,str){
 4     console.log(match)    //hello        匹配的字符串
 5     console.log(val1)    //he    第一个组匹配
 6     console.log(val2)    //ll    第二个组匹配
 7     console.log(val3)    //o    第三个组匹配
 8     console.log(index)    //0    匹配的位置下标
 9     console.log(str)    //hello    原始字符串
10     return [val1,val2,val3].join("-");
11 }
12 console.log(text.replaceAll(/(he)(ll)(o)/g,replaceFun)) //he-ll-o 

6.方法:at()

  at()方法接收一个整数作为参数,返回参数指定位置的值,支持负索引(倒着查找)。如果参数大于字符长度,返回值为undifined。

let text = "hello";
console.log(text.at(0))//h
console.log(text.at(5))//undifined

 

posted @ 2022-10-11 18:15  奔跑的哈密瓜  阅读(164)  评论(0编辑  收藏  举报