当前位置:网站首页>字符串的新增方法
字符串的新增方法
2022-07-31 05:10:00 【F班的小夏同学】
String.raw()
该方法返回一个斜杠都被转义(即斜杠前面再加一个斜杆)的字符串,往往用于模板字符串的处理方法。
String.raw`Hi\n${
2+3}!`
// 实际返回 "Hi\\n5!",显示的是转义后的结果 "Hi\n5!"
String.raw`Hi\u000A!`;
// 实际返回 "Hi\\u000A!",显示的是转义后的结果 "Hi\u000A!"
如果原字符串的斜杠已经转义,那么String.raw()会进行再次转义。
String.raw`Hi\\n`
// 返回 "Hi\\\\n"
String.raw`Hi\\n` === "Hi\\\\n" // true
includes(),startsWith(),endsWith()
传统上,javascript只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中。ES6又提供了三种新方法。
- includes():返回布尔值,表示是否找到了参数字符串。
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
let s = 'Hello world!';
s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true
这三个方法都支持第二个参数,表示开始搜索的位置。
let s = 'Hello world!';
s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false
上面代码表示,使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。
repeat()
repeat方法返回一个新字符串,表示将原字符串重复n次。
'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""
参数如果是小数,会被取整。
'na'.repeat(2.9) // "nana"
如果repeat的参数是负数或者Infinity(无穷大),会报错。
'na'.repeat(Infinity)
// RangeError
'na'.repeat(-1)
// RangeError
但是,如果参数是0到-1之间的小数,则等同于0,这是因为会先进行取整运算。0到-1之间的小数,取整以后等于-0,repeate视同为0。
'na'.repeat(-0.9) // ""
参数NaN等同于0。
'na'.repeat(NaN) // ""
如果repeate的参数是字符串 ,则会先转换成数字。
'na'.repeat('na') // ""
'na'.repeat('3') // "nanana"
padStart(),padEnd()
ES2017引入了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
上面代码中,padStart()和padEnd()一共接受两个参数,第一个参数是字符串补全生效的最大长度,第二个参数是用来补全的字符串。
如果原字符串的长度,等于或大于最大长度,则字符串补全不生效,返回原字符串。
'xxx'.padStart(2, 'ab') // 'xxx'
'xxx'.padEnd(2, 'ab') // 'xxx'
如果用来补全的字符串与原字符串,两者的长度之和超过了最大长度,则会截去超出位数的补全字符串。
'abc'.padStart(10, '0123456789')
// '0123456abc'
如果省略第二个参数,默认使用空格补全长度。
'x'.padStart(4) // ' x'
'x'.padEnd(4) // 'x '
padStart()的常见用途是为数值补全指定位数。下面代码生成10位的数值字符串。
'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"
另一个用途是提示字符串格式。
'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"
trimStart()、trimEnd()
这两个方法的行为和trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。他们返回的都是新字符串,不会修改原始字符串。
const s = ' abc ';
s.trim() // "abc"
s.trimStart() // "abc "
s.trimEnd() // " abc"
上面的代码中,trimStart()只消除头部的空格,保留尾部的空格。trimEnd()也是类似行为。
除了空格键,这两个方法对字符串头部(或尾部)的tab键、换行符等不可见的空白符号也有效。
浏览器还部署了额外的两个方法,trimLeft()是trimStart()的别名,trimRight()是trimEnd()的别名。
replaceAll()
历史上,字符串的实例方法replace()只能替换第一个匹配。
'aabbcc'.replace('b', '_')
// 'aa_bcc'
上面例子中,replace()只将第一个b替换成了下划线。
如果要替换所有的匹配,不得不使用正则表达式的g修饰符。
'aabbcc'.replace(/b/g, '_')
// 'aa__cc'
正则表达式毕竟不是那么方便和直观,ES2021引入了replaceAll()方法,可以一次性替换所有的匹配。
'aabbcc'.replaceAll('b', '_')
// 'aa__cc'
注意:这一部分和java中replace()与replaceAll()的用法不一样。
在java中:replace()和replaceAll()都是替换字符串中所有符合条件的字符串的,但是replace()不支持正则匹配,只支持字符串替换,replaceAll()同时支持字符串替换和正则匹配。如果想要只替换第一个符合条件的,java中使用replaceFirst()方法正则匹配。
在javascript中:replace()在使用字符串替换的时候只会替换掉第一个匹配字符串,要想替换掉所有的,需要使用正则匹配,而replaceAll()同时支持字符串替换和正则匹配全部替换。
String.prototype.replaceAll(searchValue, replacement)
需要注意的是,searchValue是搜索模式,可以是一个字符串,也可以是一个全局的正则表达式(带有g修饰符)!!!必须是带g修饰符的,如果searchValue是一个不带有g修饰符的正则表达式,replaceAll()会报错,这和replace()不同。replaceAll()的第二个参数replacement除了为字符串,也可以是一个函数,该函数的返回值将替换掉第一个参数searchValue匹配的文本。
'aabbcc'.replaceAll('b', () => '_')
// 'aa__cc'
at()
at()方法接受一个整数作为参数,返回参数指定位置的字符,支持负索引(即倒数的位置。)
const str = 'hello';
str.at(1) // "e"
str.at(-1) // "o"
如果参数结果位置超出了字符串范围,at()返回undefined。
边栏推荐
- MySQL8.0.26安装配置教程(windows 64位)
- Goodbye to the cumbersome Excel, mastering data analysis and processing technology depends on it
- 数据库上机实验6 数据库完整性
- 剑指offer基础版 --- 第22天
- MySQL-如何分库分表?一看就懂
- MySQL(更新中)
- 三子棋讲解(C语言)
- uni-app进阶之认证【day12】
- Quickly master concurrent programming --- the basics
- <urlopen error [Errno 11001] getaddrinfo failed>的解决、isinstance()函数初略介绍
猜你喜欢

剑指offer基础版 ---- 第29天

【MQ我可以讲一个小时】

Distributed transaction processing solution big PK!
![<urlopen error [Errno 11001] getaddrinfo failed>的解决、isinstance()函数初略介绍](/img/a4/8c75fab6a9858c5ddec25f6a8300fb.png)
<urlopen error [Errno 11001] getaddrinfo failed>的解决、isinstance()函数初略介绍

pycharm专业版使用

Anaconda configure environment directives

Qt Creator + CMake 运行调试总会自动 build 所有目标

剑指offer基础版 ----第31天

Lock wait timeout exceeded解决方案

If the account number or password is entered incorrectly for many times, the account will be banned.
随机推荐
剑指offer基础版 ----- 第25天
The TOKEN value of Kubernetes joining the cluster expires
【C语言3个基本结构详解——顺序、选择、循环】
Anaconda配置环境指令
Interviewer, don't ask me to shake hands three times and wave four times again
第7章 网络层第2次练习题答案(第三版)
Quickly master concurrent programming --- the basics
数据库学习笔记
datagrip带参sql查询
Distributed transaction processing solution big PK!
numpy和pytorch中的元素拼接操作:stack,concatenat,cat
数据库上机实验4 数据更新和视图
Distributed Transactions - Introduction to Distributed Transactions, Distributed Transaction Framework Seata (AT Mode, Tcc Mode, Tcc Vs AT), Distributed Transactions - MQ
Goodbye to the cumbersome Excel, mastering data analysis and processing technology depends on it
【一起学Rust】Rust学习前准备——注释和格式化输出
剑指offer专项突击版 --- 第 3 天
tf.keras.utils.pad_sequences()
torch.normal function usage
面试官:生成订单30分钟未支付,则自动取消,该怎么实现?
mysql 的简单运用命令