JavaScript中的String研究04:实例方法——repeat、replace、replaceAll、search、slice、split、startsWith、substring
在JavaScript中,String
对象提供了丰富的实例方法。本篇文章将深入探讨以下常用的String
实例方法:
repeat()
replace()
replaceAll()
search()
slice()
split()
startsWith()
substring()
一、repeat()
1. 定义
repeat()
方法构造并返回一个新字符串,该字符串包含被连接在一起的指定数量的原字符串副本。
2. 语法
str.repeat(count)
count
:一个介于0到正无穷大的数字,表示重复的次数。小数将被向下取整。如果count
为负数或Infinity
,将抛出RangeError
。
3. 用途
- 重复字符串,生成指定次数的副本。
- 常用于生成重复的字符序列,如填充、格式化输出等。
4. 示例
let str = "abc";
console.log(str.repeat(0)); // ""
console.log(str.repeat(1)); // "abc"
console.log(str.repeat(3)); // "abcabcabc"
console.log("=".repeat(5)); // "====="
5. 注意事项
- 如果
count
为0,返回空字符串。 - 如果
count
为NaN,视为0。 - 如果
count
为负数或Infinity
,将抛出RangeError
。
二、replace()
1. 定义
replace()
方法返回一个新字符串,其中的某些模式(模式可以是子字符串或正则表达式)被替换为指定的替换值。
2. 语法
str.replace(searchValue, replaceValue)
searchValue
:要替换的模式,可以是字符串或正则表达式。replaceValue
:用于替换的字符串或一个生成替换文本的函数。
3. 用途
- 替换字符串中的指定内容。
- 可以使用正则表达式进行复杂的替换操作。
4. 示例
(1)简单替换
let str = "Hello, World!";
let newStr = str.replace("World", "JavaScript");
console.log(newStr); // "Hello, JavaScript!"
(2)使用正则表达式
let str = "The rain in Spain stays mainly in the plain.";
let newStr = str.replace(/ain/g, "***");
console.log(newStr); // "The r*** in Sp*** stays m***ly in the pl***."
(3)使用替换函数
let str = "Item1: $10, Item2: $20";
let newStr = str.replace(/\$(\d+)/g, (match, p1) => {
let price = parseInt(p1);
return `$${price * 2}`;
});
console.log(newStr); // "Item1: $20, Item2: $40"
5. 注意事项
- 如果
searchValue
是字符串,只替换首次出现的匹配项。 - 如果需要替换所有匹配项,可以使用全局标志
g
的正则表达式,或使用replaceAll()
方法。
三、replaceAll()
1. 定义
replaceAll()
方法返回一个新字符串,所有匹配的子字符串或正则表达式都被指定的替换值替换。
2. 语法
str.replaceAll(searchValue, replaceValue)
searchValue
:要替换的模式,可以是字符串或带有全局标志g
的正则表达式。replaceValue
:用于替换的字符串或一个生成替换文本的函数。
3. 用途
- 替换字符串中所有匹配的内容。
- 简化全局替换的操作,不需要使用全局正则表达式。
4. 示例
let str = "foo bar foo baz foo";
let newStr = str.replaceAll("foo", "qux");
console.log(newStr); // "qux bar qux baz qux"
// 使用正则表达式
newStr = str.replaceAll(/foo/g, "qux");
console.log(newStr); // 同上
5. 注意事项
replaceAll()
是ES2021(ES12)引入的方法,旧版本的浏览器或运行环境可能不支持。- 如果
searchValue
是正则表达式,必须带有全局标志g
,否则会抛出TypeError
。
四、search()
1. 定义
search()
方法执行正则表达式搜索,返回匹配项在字符串中的索引位置,如果未找到则返回-1
。
2. 语法
str.search(regexp)
regexp
:一个正则表达式对象。如果传入的是非正则表达式,将使用new RegExp(obj)
将其转换为正则表达式。
3. 用途
- 查找匹配项的位置。
- 判断字符串是否包含匹配的模式。
4. 示例
let str = "The quick brown fox jumps over the lazy dog";
let index = str.search(/fox/);
console.log(index); // 16
index = str.search(/cat/);
console.log(index); // -1
5. 注意事项
search()
方法忽略正则表达式的全局标志g
,总是从字符串开头进行搜索。- 如果需要查找所有匹配项的位置,可以使用正则表达式的
exec()
方法结合循环,或使用matchAll()
方法。
五、slice()
1. 定义
slice()
方法提取字符串的片段,并返回一个新的字符串,不修改原字符串。
2. 语法
str.slice(beginIndex[, endIndex])
beginIndex
:起始索引(包含)。endIndex
:可选,结束索引(不包含)。如果省略,提取到字符串末尾。
3. 用途
- 提取字符串的子字符串。
- 支持负索引,从字符串末尾开始计算。
4. 示例
let str = "Hello, World!";
console.log(str.slice(7)); // "World!"
console.log(str.slice(0, 5)); // "Hello"
console.log(str.slice(-6)); // "World!"
console.log(str.slice(7, -1)); // "World"
5. 注意事项
- 如果
beginIndex
大于endIndex
,结果是空字符串。 - 负索引表示从字符串末尾开始计算,例如
-1
表示最后一个字符。
六、split()
1. 定义
split()
方法使用指定的分隔符字符串将一个字符串分割成子字符串数组。
2. 语法
str.split([separator[, limit]])
separator
:可选,指定分隔字符串或正则表达式。limit
:可选,限制返回的子字符串数量。
3. 用途
- 将字符串分割成数组,便于遍历或处理。
- 可以使用正则表达式进行更复杂的分割。
4. 示例
let str = "apple,banana,cherry";
let fruits = str.split(",");
console.log(fruits); // ["apple", "banana", "cherry"]
// 使用限制
let limitedFruits = str.split(",", 2);
console.log(limitedFruits); // ["apple", "banana"]
// 使用正则表达式
let text = "Hello1World2JavaScript3ES6";
let words = text.split(/\d/);
console.log(words); // ["Hello", "World", "JavaScript", "ES6"]
5. 注意事项
- 如果省略
separator
,返回包含整个字符串的数组。 - 如果
separator
为空字符串""
,将字符串拆分为单个字符的数组。
七、startsWith()
1. 定义
startsWith()
方法用于判断当前字符串是否以指定的子字符串开头,根据判断结果返回true
或false
。
2. 语法
str.startsWith(searchString[, position])
searchString
:要搜索的子字符串。position
:可选,开始搜索的位置,默认值为0
。
3. 用途
- 检查字符串是否以某个子字符串开头。
- 常用于输入验证、URL判断等。
4. 示例
let url = "https://www.example.com";
console.log(url.startsWith("https")); // true
console.log(url.startsWith("http")); // true
console.log(url.startsWith("www", 8)); // true
let str = "JavaScript";
console.log(str.startsWith("Script")); // false
console.log(str.startsWith("Script", 4)); // true
5. 注意事项
- 方法区分大小写。
position
参数指定开始搜索的位置,默认为0
。
八、substring()
1. 定义
substring()
方法返回一个字符串在开始索引到结束索引之间的子字符串(不包括结束索引处的字符)。
2. 语法
str.substring(indexStart[, indexEnd])
indexStart
:起始索引(包含)。indexEnd
:可选,结束索引(不包含)。如果省略,提取到字符串末尾。
3. 用途
- 提取字符串的子字符串。
- 与
slice()
类似,但不支持负索引。
4. 示例
let str = "Mozilla";
console.log(str.substring(0, 3)); // "Moz"
console.log(str.substring(3)); // "illa"
console.log(str.substring(2, 5)); // "zil"
// 交换参数
console.log(str.substring(5, 2)); // "zil"(自动交换参数)
5. 注意事项
- 如果
indexStart
或indexEnd
为负数,视为0
。 - 如果
indexStart
大于indexEnd
,方法会自动交换参数。 - 与
slice()
的区别在于substring()
不支持负索引。
九、总结
repeat()
:重复字符串,生成指定次数的副本。replace()
:替换字符串中的指定内容,支持正则表达式和替换函数。replaceAll()
:替换字符串中所有匹配的内容,简化全局替换操作。search()
:查找匹配项的位置,返回匹配的索引。slice()
:提取字符串的子字符串,支持负索引。split()
:将字符串分割成数组,支持正则表达式。startsWith()
:判断字符串是否以指定子字符串开头。substring()
:提取字符串的子字符串,不支持负索引。
十、参考资料
- MDN Web Docs - String
- MDN Web Docs - String.prototype.repeat()
- MDN Web Docs - String.prototype.replace()
- MDN Web Docs - String.prototype.replaceAll()
- MDN Web Docs - String.prototype.search()
- MDN Web Docs - String.prototype.slice()
- MDN Web Docs - String.prototype.split()
- MDN Web Docs - String.prototype.startsWith()
- MDN Web Docs - String.prototype.substring()
在下一篇文章中,我们将继续探讨String
对象的其他实例方法,如toLowerCase
、toUpperCase
、trim
、trimStart
、trimEnd
等,敬请期待!