Skip to content

详解字符串String中的常见方法

字符串String中的方法比较多,我将其中的常见方法进行大致归类,详情请参考下文:

备注:下面demo中将会使用的测试字符串

js
// 测试用的字符串
let str = '12Abc34'
let str2 = ' 12Abc34 '

一、关于返回指定位置的字符

js
// - charAt : 
//    - 作用: 返回指定位置的字符
//    - 语法: str.charAt(index)
//    - 解释: index必需,表示字符串中某个位置的数字,即字符在字符串中的下标

// - charCodeAt :
//    - 作用: 返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数
//    - 语法: str.charCodeAt(index)
//    - 解释: index必需,表示字符串中某个位置的数字,即字符在字符串中的下标
console.log(str.charAt(2))      // A
console.log(str.charCodeAt(2))  // 65

二、关于字符串补全

js
// - padStart :
//    - 作用: 用于头部补全
//    - 语法: str.padStart(targetLength [, padString])
//    - 解释: 
//      targetLength: 当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。
//      padString: 填充字符串。此参数的缺省值为 " "。

// - padEnd : 
//    - 作用: 用于尾部补全
//    - 语法: str.padEnd(targetLength [, padString])
//    - 解释: 
//      targetLength: 当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。
//      padString: 填充字符串。此参数的缺省值为 " "。

// - repeat :
//    - 作用: 构造并返回一个新字符串,该字符串包含被连接在一起的指定数量的字符串的副本
//    - 语法: str.repeat(count)
//    - 解释: count: 介于 0 和 +Infinity 之间的整数。表示在新构造的字符串中重复了多少遍原字符串。
console.log(str.padStart(9, 'X'))  // XX12Abc34
console.log(str.padEnd(9, 'Y'))    // 12Abc34YY
console.log(str.repeat(2))         // 12Abc3412Abc34

三、关于正则匹配

js
// - match :
//    - 作用: 检索返回一个字符串匹配正则表达式的结果
//    - 语法: str.match(regexp)
//    - 解释: 
//      regexp: 一个正则表达式对象。如果不传此参数,你将会得到一个包含空字符串的 Array :[""]

// - matchAll :
//    - 作用: 返回一个包含所有匹配正则表达式的结果及分组捕获组的迭代器
//    - 语法: str.matchAll(regexp)
//    - 返回值: 一个迭代器(不可重用,结果耗尽需要再次调用方法,获取一个新的迭代器)
//    - 解释: 
//      regexp: 一个正则表达式对象。RegExp必须是设置了全局模式g的形式,否则会抛出异常TypeError。

// - replace :
//    - 作用: 返回一个由替换值(replacement)替换部分或所有的模式(pattern)匹配项后的新字符串。
//    - 语法: str.replace(regexp|substr, newSubStr|function)
//    - 解释: 
//      regexp (pattern):一个RegExp 对象或者其字面量。
//      substr (pattern):一个将被 newSubStr 替换的 字符串。
//      newSubStr (replacement):用于替换掉第一个参数在原字符串中的匹配部分的字符串。
//      function (replacement):一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。

// - replaceAll :
//    - 作用: 返回一个新字符串,新字符串所有满足 pattern 的部分都已被replacement 替换
//    - 语法: str.replaceAll(regexp|substr, newSubstr|function)
//    - 解释: 
//      regexp: 一个正则表达式对象。RegExp必须是设置了全局模式g的形式,否则会抛出异常TypeError。

// - search :
//    - 作用: 执行正则表达式和 String 对象之间的一个搜索匹配
//    - 语法: str.search(regexp)
//    - 返回值:如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引;否则,返回 -1
//    - 解释: 
//      regexp: 一个正则表达式(regular expression)对象
let regx = /[A-Z]/g
console.log(str.match(regx))                  // ["A"]
console.log(str.matchAll(regx))               // RegExpStringIterator {}
console.log(str.replace(/\d/g, '*'))          // **Abc**
console.log(str.replaceAll(/\d/g, '*'))       // **Abc**
console.log('12AAAbc34'.replaceAll('A', '*')) // 12***bc34
console.log(str.search('A'))                  // 2

四、关于字符串截取与拼接

js
// - split :
//    - 作用: 使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置
//    - 语法: str.split([separator[, limit]])
//    - 解释: 
//      separator: 指定表示每个拆分应发生的点的字符串
//      limit: 一个整数,限定返回的分割片段数量

// - substring :
//    - 作用: 返回一个字符串在开始索引到结束索引之间的一个子集, 或从开始索引直到字符串的末尾的一个子集
//    - 语法: str.substring(indexStart[, indexEnd])
//    - 解释: 
//      indexStart: 需要截取的第一个字符的索引,该索引位置的字符作为返回的字符串的首字母
//      indexEnd: 可选。一个 0 到字符串长度之间的整数,以该数字为索引的字符不包含在截取的字符串内

// - slice :
//    - 作用: 提取某个字符串的一部分,并返回一个新的字符串,且不会改动原字符串
//    - 语法: str.slice(beginIndex[, endIndex])
//    - 解释: 
//      beginIndex: 从该索引(以 0 为基数)处开始提取原字符串中的字符
//      endIndex: 可选。在该索引(以 0 为基数)处结束提取字符串

// - concat :  ***** 强烈建议使用赋值操作符(+, +=)代替 concat 方法 *****
//    - 作用: 将一个或多个字符串与原字符串连接合并,形成一个新的字符串并返回
//    - 语法: str.concat(str2, [, ...strN])
//    - 解释: 
//      str2 [, ...strN]: 需要连接到 str 的字符串

// - substr :  ***** 并非JavaScript核心语言的一部分,未来将可能会被移除掉 *****
//    - 作用: 返回一个字符串中从指定位置开始到指定字符数的字符
//    - 语法: str.substr(start[, length])
//    - 解释: 
//      start: 开始提取字符的位置
//      length:可选。提取的字符数
console.log(str.split(''))               // ["1", "2", "A", "b", "c", "3", "4"]
// 注意:slice和substring的差别在于slice的参数可以是负数,而substring不行
console.log(str.substring(2, 5))         // Abc
console.log(str.slice(2, 5))             // Abc
console.log(str.concat('x', 'y', 'z'))   // 12Abc34xyz
console.log(str.substr(2, 3))            // Abc

五、关于字符串搜索

js
// - indexOf :
//    - 作用: 方法返回调用它的 String 对象中第一次出现的指定值的索引,从 fromIndex 处进行搜索。如果未找到该值,则返回 -1
//    - 语法: str.indexOf(searchValue [, fromIndex])
//    - 解释: 
//      searchValue: 要被查找的字符串值
//      fromIndex: 可选, 数字表示开始查找的位置。可以是任意整数,默认值为 0

// - lastIndexOf :
//    - 作用:返回调用String对象的指定值最后一次出现的索引,在一个字符串中的指定位置fromIndex处从后向前搜索。如果没找到这个特定值则返回-1 
//    - 语法: str.lastIndexOf(searchValue[, fromIndex])
//    - 解释: 
//      searchValue: 要被查找的字符串值。如果searchValue是空字符串,则返回fromIndex
//      fromIndex: 可选, 待匹配字符串searchValue的开头一位字符从 str的第fromIndex位开始向左回向查找

// - includes :
//    - 作用: 用于判断一个字符串是否包含在另一个字符串中,根据情况返回 true 或 false
//    - 语法: str.includes(searchString[, position])
//    - 解释: 
//      searchString: 要在此字符串中搜索的字符串
//      position 可选: 从当前字符串的哪个索引位置开始搜寻子字符串,默认值为 0

// - startsWith :
//    - 作用: 用来判断当前字符串是否以另外一个给定的子字符串开头,并根据判断结果返回 true 或 false
//    - 语法: str.startsWith(searchString[, position])
//    - 解释: 
//      searchString: 要搜索的子字符串
//      position 可选: 在 str 中搜索 searchString 的开始位置,默认值为 0

// - endsWith :
//    - 作用: 用来判断当前字符串是否是以另外一个给定的子字符串“结尾”的,根据判断结果返回 true 或 false
//    - 语法: str.endsWith(searchString[, length])
//    - 解释: 
//      searchString: 要搜索的子字符串
//      length 可选: 作为 str 的长度。默认值为 str.length
console.log('12AAAbc34'.indexOf('A'))            // 2
console.log('12AAAbc34'.lastIndexOf('A'))        // 4
console.log(str.includes('A'))                   // true
console.log(str.startsWith('A', 2))              // true
console.log(str.endsWith('A'))                   // false
console.log(str.endsWith('A', 3))                // true

六、关于字符串大小写 & 移除前后空白

js
// // 大小写相关
// toLocaleLowerCase: ƒ toLocaleLowerCase()
// toLocaleUpperCase: ƒ toLocaleUpperCase()
// toLowerCase: ƒ toLowerCase()
// toUpperCase: ƒ toUpperCase()

// // 移除字符串首尾空白
// trim: ƒ trim()
// trimEnd: ƒ trimEnd()
// trimStart: ƒ trimStart()
// trimLeft: ƒ trimStart()
// trimRight: ƒ trimEnd()
console.log(str.toLowerCase())   // `12abc34`
console.log(str.toUpperCase())   // `12ABC34`
console.log(str2.trim())         // `12Abc34`
console.log(str2.trimEnd())      // ` 12Abc34`  与 trimRight 效果一致
console.log(str2.trimStart())    // `12Abc34 `  与 trimLeft 效果一致