JavaScript 字符串方法

120 阅读5分钟

记录一下字符串常用方法

1、length

返回字符串的长度

let str = 'abc'
str.length // 3

2、indexOf(str, position)

返回字符串中指定文本首次出现的索引(位置)

// str 要搜索的子字符串
// position 搜索的起始位置 默认为0 ,小于0时按0取值,大于字符串长度时不会搜索字符串

let str = 'abc'
str.indexOf('a') // 0

2-1、类似方法 lastIndexOf(str, position)

返回指定文本在字符串中最后一次出现的索引

// 参数同上

let str = 'abca'
str.lastIndexOf('a') // 3

PS: 如果未找到文本,indexOf()和lastIndexOf()均返回 -1,两个函数都接收第二个参数 为搜索起始位置

2-2、类似方法 search(regexp)

用于在 String 对象中执行正则表达式的搜索,寻找匹配项

// regexp 一个正则表达式对象

let str = 'abca'
str.search('a') // 0

两种方法,indexOf() 与 search(),是相等的。

这两种方法是不相等的。区别在于:

①、search() 方法没有第二个参数。

②、indexOf() 方法无法设置更强大的搜索值(正则表达式)

2-3、类似方法 includes(str, position)

现代更常用

方法执行区分大小写的搜索,以确定是否可以在一个字符串中找到另一个字符串,返回true或false

// str, position 参数同 indexOf

3、replace(pattern, replacement)

方法返回一个新字符串,其中一个、多个或所有匹配的 pattern 被替换为 replacement

字符串模式只会被替换一次。要执行全局搜索和替换,请使用带有 g 标志的正则表达式或使用replaceAll。

// pattern 可以是字符串或 `RegExp`
// replacement 可以是字符串或一个在每次匹配时调用的 函数

let str = 'Abcd'
str.replace(/a/i, 'hi,') // hi,bcd

3-1、类似方法 replaceAll(pattern, replacement)

// pattern 如果是一个正则表达式则必须设置全局(`g`)标志 否则会抛出 `TypeError`
// replacement 可以是字符串或一个在每次匹配时调用的 函数

const paragraph = "I think Ruth's dog is cuter than your dog!";
console.log(paragraph.replaceAll('dog', 'monkey'));
// Expected output: "I think Ruth's monkey is cuter than your monkey!"

4、repeat(count)

返回一个新字符串,其中包含指定数量的所调用的字符串副本,这些副本连接在一起

// count 介于 `0` 和 `+Infinity`之间的整数

const mood = 'Happy! ';
console.log(`I feel ${mood.repeat(3)}`);
// Expected output: "I feel Happy! Happy! Happy! "

5、slice(start, end)

提取字符串的某个部分并在新字符串中返回被提取的部分(不改变原字符串)

如果某个参数为负,则从字符串的结尾开始计数

如果省略第二个参数,则该方法将裁剪字符串的剩余部分

// start 要返回的子字符串中 包含 的第一个字符的索引
// end 要返回的子字符串中 排除 的第一个字符的索引

let str = 'abcd'
let res = str.slice(0, 2) // ab
// str abcd
let ret = str.slice(-2, -1) // c
let req = str.slice(1) // bcd

负值位置不适用 Internet Explorer 8 及其更早版本

5-1、类似方法 substring(start, end)

返回该字符串从起始索引到结束索引(不包括)的部分,如果未提供结束索引,则返回到字符串末尾的部分。

类似于slice(),不同之处在于无法接收负的索引

// 参数同上

// substr(start, length) 返回给定长度字符串, 已弃用!

6、split(separator, limit)

方法接受一个模式,通过搜索模式将字符串分割成一个 有序 的子串列表,将这些子串放入一个数组,并返回该数组。

// separator 分割标识
// limit 指定数组中包含的子字符串的数量限制 
//       如果在达到极限之前就达到了字符串的末端,那么数组包含的条目可能少于 `limit`
//       如果 `limit` 为 `0`,则返回 `[]`

let str = 'abcd'
str.split('') // [a, b, c, d]

7、trim()

从字符串的两端移除空白字符,并返回一个 新的 字符串,而不会修改原始字符串

const str = "   foo  ";
console.log(str.trim()); // 'foo'

7-1 类似方法 trimStart()

从字符串的开头移除空白字符,并返回一个新的字符串, trimLeft() 是该方法的别名

7-2 类似方法 trimEnd()

从字符串的结尾移除空白字符,并返回一个新的字符串, trimRight() 是该方法的别名

8、charAt(index)

方法返回一个由给定索引处的单个 UTF-16 码元构成的新字符串

// index 要返回的字符的索引,从零开始。会被转换为整数——`undefined` 会被转换为 0

let str = 'abcd'
str.charAt(0) // a

8-1、类似方法 charCodeAt(index)

返回一个整数,表示给定索引处的 UTF-16 码元,其值介于 0 和 65535 之间

// 参数同上

let str = 'abcd'
str.charCodeAt(str[0]) // 97

8-2、类似方法 codePointAt(index)

返回一个非负整数,该整数是从给定索引开始的字符的 Unicode 码位值。请注意,索引仍然基于 UTF-16 码元,而不是 Unicode 码位

// 参数同上

let str = 'abcd'
str.codePointAt(str[0]) // 97

9、startsWith(str, position)

方法用来判断当前字符串是否以另外一个给定的子字符串开头,并根据判断结果返回 true 或 false

// str 要在该字符串开头搜索的子串。不能是 正则表达式
// position 搜索起始位置 默认为0

const str1 = 'Saturday night plans';
console.log(str1.startsWith('Sat'));
// Expected output: true
console.log(str1.startsWith('Sat', 3));
// Expected output: false

9-1 类似方法 endsWith(str, position)

判断一个字符串是否以指定字符串结尾,如果是则返回 true,否则返回 false

// 参数同上

10、toLowerCase()

将字符串转换为小写形式

10-1、类似方法 toUpperCase()

将字符串转换为大写形式

10-2、类似方法 toLocaleLowerCase()

方法会根据特定区域设置的大小写映射规则,将字符串转换为小写形式并返回。

10-3、类似方法 toLocaleUpperCase()

方法会根据特定区域设置的大小写映射规则,将字符串转换为大写形式并返回。