盘点字符串String方法
前言
在js中,
String
类型是我们在处理数据时最常接触的类型之一了。但是String
类型已经存在惊人的51个方法了,不知道你是用过几种。
String
类型也是最万能的,在js中任何类型都可以转成字符串类型,但反过来就不一定了,所以这好像理解了为什么平平无奇的String
类型可以有这么多方法了。这么多方法当然也存在一些不被推荐的方法,准备删除或出于兼容性而保留的,但是部分浏览器也还支持。以下会单独分开说,可以作为了解。
1. 推荐方法(37个)
1.1 ⭐includes 查找一组字符串中是否存在某个字符
此方法用来查找一组字符串中是否存在某个字符,区分大小写。接收两个参数:
第一个为希望查找的字符,并且不能是正则表达式,所有传入的参数都将自动转为字符串。
第二个参数为要从哪个位置开始查找(可选),默认为0,返回一个布尔值。
1 | const zhIntroduce = "我是iceCode,初来乍到,还请多多关照。"; |
1.2 ⭐indexOf 查找一组字符串中的某个字符,并返回索引
这个方法同includes
差不多,同样会查找一组字符串中是否存在某个字符,不同的是**indexOf
是返回一个索引,而includes
返回的是一个布尔值**。接收两个参数:
第一个为希望查找的字符,规则同includes
,
第二个为想要从哪个地方查找(可选),返回查找字符第一次出现的索引,没找到则返回-1。
1 | const zhIntroduce = "我是iceCode,初来乍到,还请多多关照。"; |
1.3 lastIndexOf indexOf的反向查找版
lastIndexOf
与indexOf
的区别就是,lastIndexOf
是从后往前找,并且查找到这组字符串中唯一值的结果不会改变(当查找空字符串时,返回的结果可能会有一丝变化),接收参数与indexOf
相同。返回查找字符串最后一次出现的索引,没找到为-1
1 | const zhIntroduce = "我是iceCode,初来乍到,还请多多关照。"; |
1.4 padStart 从前往后重复填充字符到指定长度
此方法会重复填充给定的字符到指定长度,接收两个参数:
第一个为指定长度,
第二个是要填充的字符,
返回一个最终指定长度并包含重复填充字符的字符串,如果第一个指定的长度小于当前字符的长度则返回原字符串
1 | //看上面文字描述可能有点不太好理解,直接看代码就非常好理解了 |
1.5 padEnd 从后往前重复填充字符到指定长度
这个方法同padStart
几乎类似,差别就是这个方法是从后往前填充。接收参数同padStart
相同,返回值的规则与padStart
相同
1 | const name = "iceCode"; |
1.6 ⭐replace 替换指定字符
replace
只会替换第一个找到匹配字符的元素然后进行替换,接收两个参数:
第一个为要被替换的字符(任何不是String
类型的参数,都会被转成String
处理),可以是正则表达式,
第二个为替换为的字符,返回被替换后一个新的字符串。
1 | const zhIntroduce = "我是iceCode,初来乍到,还请多多关照。"; |
另外替换为的字符也可以是特殊替换模式,不过需要使用正则表达式进行查找
- 使用
$&
插入匹配的子字符串:
1 | const name = "iceCode"; |
- 使用
$$
插入字符串$:
1 | const name = "iceCode"; |
- 使用 `$``a(反引号)插入匹配子字符串之前的字符串片段:
1 | const name = "iceCode"; |
- 使用
$'
(单引号)插入匹配子字符串之后的字符串片段:
1 | const name = "iceCode"; |
- 使用
$n
插入第 n 个捕获组:
1 | const name = "iceCode"; |
- 使用
$Name
插入名称为 Name 的命名捕获组:
这个例子与上面的例子类似,只是使用了命名捕获组。以下是相应的代码:
1 | const name = "iceCode"; |
这里对正则表达式的掌握还是有一些的,正则表达式
另外,替换为的参数也可以是一个回调函数,传入一个参数,是匹配到的元素,这个回调函数可以作为一个简单工厂函数来操作
1 | const name = "iceCode"; |
1.7 replaceAll 替换一段字符串中全部指定字符
replaceAll兼容性有些不太好,需要node15以上,老项目中谨慎使用
此方法相当于replace
的补全版,因为replace
在不使用正则的情况下,只能匹配到一段字符串中第一个找到的字符,对于要替换所查找到的所有指定字符时可能会有些麻烦,使用replaceAll
可以方便的替换所有指定字符。参数和指定被替换的字符与repalce
相同,这里就不多写了
1 | const introduce = "I'm iceCode.I am inexperienced, but also invite more attention."; |
1.8 ⭐slice 截取字符串
slice
截取对应索引的字符串,并返回一个新的字符串,不会改变原数组。接收两个参数:
第一个为开始截取的索引位置,
第二个为截取结束位置的索引(可选),
不包括第二个参数索引位置的元素,返回一个新的截取后的字符串。
1 | const name = "iceCode"; |
1.9 ⭐substring 截取字符串
substring
与slice
效果相同,区别在于他们传的参数,不同参数会有不同区别。同样接受两个参数,参数同样的效果,同样不改变原数组,同样返回要给新的截取后的字符串
1 | //效果都知道,这里只说它们的区别 |
1.10 ⭐split 指定字符分割成数组
split
可以将字符串以指定元素分割成一个数组,可以说是String
方法中比较常用的一个了,接收两个参数:
第一个为指定字符,对字符串进行分割为数组,
第二个为分割的数组最大长度,返回一个数组。
1 | const name = "iceCode"; |
1.11⭐ toUpperCase 将英文字符串转换成大写
toUpperCase
作用很简单,就是将英文字符串转换成大写英文,如果是汉字则返回原字符串
1 | const zhIntroduce = "我是iceCode,初来乍到,还请多多关照。"; |
1.12 ⭐toLowerCase 将英文字符串转换成小写字符串
toLowerCase
作用一样很简单,就是将英文字符串转换成小写英文,如果是汉字则返回原字符串
1 | const zhIntroduce = "我是iceCode,初来乍到,还请多多关照。"; |
1.13 toLocaleUpperCase 根据特定时区将字符串转化成大写
toLocaleUpperCase
根据特定区域设置的大小写映射规则,将字符串转换为大写形式,接收一个可选的参数,参数规则参考Intl
主页上的参数描述。大多情况下与toUpperCase
一致,只有个别地区的大小写会有些区别。
1 | const zhIntroduce = "我是iceCode,初来乍到,还请多多关照。"; |
1.14 toLocaleLowerCase 根据特定时区将字符串转化成小写
toLocaleLowerCase
根据特定区域设置的大小写映射规则,将字符串转换为小写形式,接收一个可选参数,参数规则参考Intl
主页上的参数描述。大多情况下与toLowerCase
一致,只有个别地区的大小写会有些区别。
1 | const zhIntroduce = "我是iceCode,初来乍到,还请多多关照。"; |
1.15 ⭐trim 去除两端空白字符
trim
就非常很好理解,就是去除两端的空格的,一般在表单输入的时候,有可能会有多输入空白字符,可以使用trim
对两端空白字符进行剔除
1 | const name = " iceCode "; |
1.16 ⭐trimStart、trimEnd 剔除开头空白字符和剔除结尾空白字符
trim
是一次性剔除两端空白字符,显得没有那么灵活。这里trimStart、trimEnd
分别是剔除开头空白字符和剔除结尾空白字符,可以在使用的时候更加灵活。另外trimLeft、trimRight是trimStart、trimEnd的别名
1 | const name = " iceCode "; |
1.17 ⭐concat 拼接字符串
concat
可以对多个字符串相互拼接,接收n个任意类型参数,参数为要拼接的字符串或其他类型参数。这个方法就好比是游泳比赛的救生员一样。因为字符串与任何类型数相加最后都是字符串,这个方法几乎用不到。
1 | const zhIntroduce = "我是iceCode,初来乍到,还请多多关照。"; |
1.18 ⭐startsWith 判断一个字符串是否以指定字符串开头
startsWith
接收两个参数,
第一个为要查找结尾的字符,可以是任意类型(正则除外),但都会默认转换成字符串,
第二个参数为开始的索引,返回个布尔值
1 | const zhIntroduce = "我是iceCode,初来乍到,还请多多关照。"; |
1.19 ⭐endsWith 判断一个字符串是否以指定字符串结尾
endsWith
接收两个参数,
第一个为要查找结尾的字符,可以是任意类型(正则除外),但都会默认转换成字符串,
第二个参数为结尾的索引(最后一个字符的索引加 1),返回个布尔值
1 | const zhIntroduce = "我是iceCode,初来乍到,还请多多关照。"; |
1.20 ⭐charAt 返回给定的索引的字符
charAt
返回一个由给定索引处的单个 UTF-16
码元构成的新字符串。接收一个参数,为要找元素的索引值。返回要找的元素。
1 | const name = "iceCode"; |
1.21 charCodeAt 给定索引处的 UTF-16 码元
此方法与charAt
相似,只是返回值不同,charAt
返回的是由UTF-16
码元构成的新字符串,而charCodeAt
返回的则直接是一个码元,其值介于 0
和 65535
之间。
1 | const name = "iceCode"; |
1.22 normalize 返回字符串 Unicode 标准化形式
了解Unicode可以查看:Unicode字符表 (rapidtables.org)
normalize
返回一个Unicode
标准化形式,接收一个可选参数,参数值为:
- NFC:规范分解,然后进行规范组合。
- NFD:规范分解。
- NFKC:兼容分解,然后进行规范组合。
- NFKD:兼容分解。
如果normalize
没有传入参数(undefined
),则按照NFC来解析。正常来说一个Unicode
编码在使用normalize
(不传参)和不使用normalize
的时候得到的结果大致是一样的。
1 | //这里随便找了几个Unicode编码 |
1.23 codePointAt 给定索引开始的字符的 Unicode 码位值
该整数是从给定索引开始的字符的 Unicode
码位值。请注意,索引仍然基于 UTF-16
码元,而不是 Unicode
码位。有关 Unicode
的信息,请参阅 UTF-16 字符、Unicode 码位和字素簇。
1 | const name = "iceCode"; |
1.24 at 查找索引位置的字符
此方法兼容性一般,node版本需要16.6.0以上,生产环境谨慎使用 字符串的at
方法与数组的at
方法类似,返回结果如果有与charAt
一致,接收一个参数,为一个整数,可以是正整数也可以为负数,返回指定位置的单个 UTF-16
码元组成的字符,负数的时候从后往前找。
1 | const name = "iceCode"; |
1.25 ⭐match 检索与正则表达式匹配的结果
match
方法会检索与正则表达式匹配的结果,接收一个正则表达式的参数,返回一个数组,如果正则表达式中没有使用g(全局)检索,数组中则会返回检索到元素的详细信息,如果添加了g,则会返回一个包含所有匹配到元素的数组
1 | const name = "iceCode"; |
1.26 matchAll 返回检索与正则表达式匹配结果的一个迭代器对象
此方法与match
方法很像,但是返回值却大不相同,match
方法返回的是一个正常的数组,matchAll
则是一个迭代器对象(想必对迭代器对象都已经非常熟悉了),迭代器对象里包含着每一个匹配到的元素的详细信息。matchAll
方法接收一个正则表达式的参数,且正则表达式参数必须带有g(全局匹配),否则会报错。
1 | const name = "iceCode"; |
1.27⭐ search 返回检索与正则表达式匹配的索引
此方法与match
类似,不过match
返回的是匹配到的字符,而search
返回的是匹配到第一个的元素的索引,无论是否添加g(全局检索)都只会返回第一个查找到元素的索引,没有找到则返回-1。接受一个正则表示的参数。
1 | const name = "iceCode"; |
1.28 ⭐repeat 复制
repeat
会接收一个Number
类型的参数,范围0~+Infinity
,为复制本身的字符的次数
1 | const name = "iceCode"; |
1.29 toWellFormed 字符串的所有单独代理项都被替换为 Unicode 替换字符 U+FFFD
此方法兼容极差,谨慎使用。Node版本需要20.0.0+
toWellFormed()
迭代字符串的码元,并将任何单独代理项替换为 Unicode 替换字符 U+FFFD �
。这确保了返回的字符串格式正确并可用于期望正确格式字符串的函数,比如 encodeURI
。由于引擎能够直接访问字符串的内部表示,与自定义实现相比 toWellFormed()
更高效。
当在某些上下文中使用格式不正确的字符串时,例如 TextEncoder
,它们会自动转换为使用相同替换字符的格式正确的字符串。当单独代理项被呈现时,它们也会呈现为替换字符(一个带有问号的钻石形状)。
也可以简单的理解为toWellFormed
相当于一项字符串转码前的安全转换
1 | const strings = [ |
1.30 isWellFormed 判断该字符串是否包含单独代理
此方法兼容极差,谨慎使用。Node版本需要20.0.0+
同toWellFormed
方法类似,也可以简单额理解为转码前的一个安全判断
1 |
|
1.31 localeCompare 字符串之间的比较
localeCompare
方法返回一个数字,用于表示比较字符串在排序顺序中,在给定的字符串之前还是之后或者相同。在支持 Intl.Collator
API 的实现中,该方法仅是调用了 Intl.Collator
方法。
localeCompare
方法接收三个参数,
第一个参数是要比较的字符串,
第二个参数是表示缩写语言代码的字符串,
第三个参数是一个配置对象,为对应于 Intl.Collator()
构造函数的参数。 了解更多点击这里
1 | const a = "réservé"; |
1.32 ⭐toString 返回字符串的值
String
对象重写了 Object
的 toString
方法;对于 String
值,toString
方法返回字符串本身(如果它是原始值)或 String
对象封装的字符串。它的实现与String.prototype.valueOf()
完全相同。当一个 String
对象在期望字符串的上下文中使用时(比如在模板字面量中),JavaScript 会自动调用 toString()
方法。
1 | //在重写之前调用toString会返回字符串的值 |
1.33 ⭐valueOf 返回字符串的值
在String
中valueOf
与toString
是等价的,此方法通常由 JavaScript
在内部调用,而不是在代码中显式调用。
1 | const name = "iceCode"; |
1.34 String.raw 模板字符串的标签函数
String.raw
的作用类似于 Python
中的 r
前缀或 C#
中用于字符串字面量的 @
前缀。它用于获取模板字符串的原始字符串形式——即,变量(例如 ${foo}
)会被替换处理,但转义序列(例如 \n
)不会被处理。
它的使用方法有个两种,一种是后面直接跟模板字符串(比较常用),是js函调用的一种特殊方法(前段时间吵得沸沸腾腾的react
调用SQL
的写法就是这种)。另外一种是括号形式的函数调用,接收一个以上参数,第一个参数为一个对象,对象有一个raw
属性,属性值可以是任意类型(除了null,undefined,但建议是类数组对象),从第二个参数开始为包含的替换表达式对应的值。
1 | //先看第一种模板字符串调用 |
1.35 String.fromCharCode 返回指定的 UTF-16 码元序列创建的字符串
接收n个参数,为UTF-16
码元,范围在0~65535(0xFFFF)
之间,可以将他们转换为指定的字符
1 | //返回UTF-16码元对应的字符 |
1.36 String.fromCodePoint 根据指定的码位序列返回一个字符串
接收n个参数,为Unicode
码位,范围在0~0x10FFFF
之间,返回通过使用指定的码位序列创建的字符串
1 | //返回码位对应的字符 |
2. 不再推荐(14个)
2.1 fontsize 创建font元素,并指定字体大小
对于 fontsize()
方法来说,<font>
元素本身在 HTML5 中已被移除,不应再使用。接收一个1-7之间的参数,来创建一个指定大小的字符元素
1 | const name = "iceCode"; |
2.2 fontcolor 创建font元素,并指定字体颜色
同fontsize
方法描述一样,接收一个颜色的字面量或十六进制的RGB颜色参数,来创建一个指定颜色的字符元素
1 | const name = "iceCode"; |
2.3 fixed 创建一个tt元素
fixed
会创建一个tt
元素,并将指定字符嵌入元素内,tt
元素会致该字符串以等宽字体显示。
1 | const name = "iceCode"; |
2.4 big 创建big元素
big
方法用于创建一个big
元素,并将指定字符嵌入元素内,将以大号字体显示
1 | const name = "iceCode"; |
2.5 small 创建small元素
small
方法用于创建一个small
元素,并将指定字符嵌入元素内,将以小号字体显示
1 | const name = "iceCode"; |
2.6 anchor 创建a元素,并指定name
anchor
方法用于创建一个a
元素,并将指定字符嵌入元素内,接收一个字符串参数,为name
属性的值
1 | const name = "iceCode"; |
2.7 link 创建a元素,并指定href
link
方法用于创建一个a
元素,并将指定字符嵌入元素内,接收一个字符串参数,为href
属性的链接值
1 | const name = "iceCode"; |
2.8 blink 创建blink元素
blink
方法用于创建一个blink
元素,并将指定的字符嵌入元素内。blink
元素在旧版浏览器中的作用是闪烁,已经被现代浏览器删除。
1 | const name = "iceCode"; |
2.9 bold 创建b元素
bold
方法用于创建一个b
元素,并将指定字符嵌入元素内,将以粗体显示
1 | const name = "iceCode"; |
2.10 italics 创建i元素
italics
方法用于创建一个i
元素,并将指定字符嵌入元素内,将以斜体显示
1 | const name = "iceCode"; |
2.11 strike 创建strike元素
strike
方法用于创建一个strike
元素,并将指定字符嵌入元素内,将以删除线的形式显示
1 | const name = "iceCode"; |
2.12 sup 创建sup元素
sup
方法用于创建一个sup
元素,并将指定字符嵌入元素内,将以上标的形式显示
1 | const name = "iceCode"; |
2.13 sub 创建sub元素
sub
方法用于创建一个sub
元素,并将指定字符嵌入元素内,将以下标的形式显示
1 | const name = "iceCode"; |
2.14 substr 返回该字符串的一部分
substr
会返回字符串的一部分,接收两个参数,
第一个参数为开始的索引值,
第二个参数为要返回多少位字符的个数。
substr
不属于 ECMAScript
主要规范。所以这里也不推荐,推荐使用标准的substring
和slice
方法
1 | const name = "iceCode"; |
不推荐的方法除了substr之外,基本是HTML的包装方法,但这些包装方法已经被弃用,并且仅为了兼容性而标准化。推荐使用document.createElement方法代替
3. 最后
String
的方法虽多,但是平时经常使用中的方法却寥寥无几。除了一些不推荐的方法以外,大多String
方法会针对不同国家不同地区进行不同的编码,对UTF-16
和和Unicode
编码的一些处理,也不是我们日常数据处理或者开发中所需要的,这些方法大可浏览一遍即可。
另外对字符串的处理一般少不了正则表达式,所以对于正则表达式使用还是有必要会一些的
作者:iceCode
链接:https://juejin.cn/post/7300731450597277732
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。