你将知道:
- 使用
toLowerCase()
和toUpperCase()
更改大小写 - 使用
trim()
、trimStart()
和trimEnd()
修剪空格 - 使用
indexOf()
和lastIndexOf()
搜索 - 使用
split()
分割字符串 - 使用
slice()
和substring()
对字符串进行切片 - 使用
replace()
和replaceAll()
替换子字符串 懒得介绍了
toLowerCase()
and toUpperCase()
'Hello World!'.toLowerCase() >>> 'hello world'
'Hello World!'.toUpperCase() >>> 'HELLO WORLD!'
修剪空白字符
空白字符包括空格、制表符 ( \t
)、回车符 ( \r
) 和换行符 ( \n
)。
搜索子字符串
它们是 indexOf()
和 lastIndexOf()
。
indexOf()
方法返回主字符串中给定子字符串首次出现的索引。如果未找到该子字符串,则返回 -1
。
string.indexOf(substring[, index])
substring
是要在 string
中搜索的字符串,而 index
是要开始搜索的位置。默认情况下, index
设置为 0
字符串的开头。如果在 string
中找到 substring
,则返回其索引,否则返回值 -1
。
考虑下面的代码:
var str = 'Hello World!';
console.log(str.indexOf('World')); // 6
我们使用 indexOf()
在 str
中搜索 'World'
。返回的是 6
,这是子字符串 'World'
在 str
中的起始位置( 'Hello W orld!'
)。
让我们考虑另一个例子。
var str = 'Hello World!';
console.log(str.indexOf('o')); // 4
这里我们尝试在 str
中搜索字符 'o'
,返回 4
这是因为 indexOf()
只关心第一个匹配项。
当我们想要再次搜索,超出子字符串第一次出现的索引时, indexOf()
的第二个参数很方便。
var str = 'Hello';
var i = str.indexOf('l');
console.log(i); // 2
i = str.indexOf('l', i + 1);
console.log(i); // 3
console.log(str.indexOf('l', i + 1)); // -1
首先,我们检索 str
中第一次出现的 'l'
的索引。结果为 2
( 'He l lo World!'
中高亮字符的索引)。
接下来,我们通过向 indexOf()
传入第二个参数,比上次出现的 'l'
的索引大 1,来检索 str
中下一个出现的 'l'
的索引。结果为 3
(即 'Hel l o World!'
中高亮字符的索引)。
之后,我们再次检索 str
中最后一个索引之后下一个出现的 'l'
的索引。由于 str
中不再出现 'l'
,因此返回 -1
。
拆分字符串
可以使用 split()
方法将字符串分解为子字符串数组。split()
方法在每次出现给定分隔符时将字符串拆分开,并返回包含剩余子字符串的数组。
string.split([separator[, limit]])
separator
指定分隔符,用于分隔主字符串。如果省略,split()
将返回包含整个字符串的数组。limit
指定返回数组中元素的最大数量。如果省略,则默认为 2 32 - 1 。
举个例子,假设我们要从字符串 '10,20,30'
中提取数字。我们可以做的就是在这个字符串上简单地调用 split()
函数,并指定 ','
字符作为分隔符。
'Hello'.split()
>>> ["Hello"]
'H e l l o'.split(' ')
>>> ["H", "e", "l", "l", "o"]
'Hello'.split('', 10)
>>> ['H', 'e', 'l', 'l', 'o']
'Hello'.split('', 2)
>>> ['H','e']
'Hello'.split('', 0)
>>> []
默认情况下, limit
被设置为一个非常大的值,即 2 32 - 1 ,在几乎所有前端字符串处理问题中都不会触及这个值。哪有那么大的字符串
切片字符串
处理字符串时,另一种常见的做法是从给定字符串中提取一小部分。这通常称为字符串切片 。
1. slice()
slice()
方法将字符串从起始位置切到结束位置 ,并返回切片。
string.slice([start[, end]])
start
指定切片的起始索引。默认值为0
。end
指定切片结束的索引。此参数不包含索引。默认为字符串的长度。
'Hello'.slice()
>>> 'Hello'
'Hello'.slice(1)
>>> 'ello'
'Hello'.slice(1,2)
>>> 'e'
请注意, end
参数是独占的 ,也就是说,切片在给定的 end
索引之前结束 。slice()
最有趣的地方在于,我们也可以为其提供负索引。这样的索引是从字符串末尾计算的。例如, -1
指向最后一个字符, -2
指向倒数第二个字符,依此类推。
'Coding'.slice(-2)
>>> 'ng'
其实可以从 str.length - 2 开始数
'Coding'.slice(-2, -1)
>>> 'n'
其实相当于 'coding'.slice(4,5)
2. substring()
与 slice()
类似, substring()
方法将字符串从起始位置切到结束位置 ,并返回切片。
slice()
和 substring()
之间的区别
主要区别在于 slice()
和 substring()
的内部实现中给定参数的感知方式。
如果 substring()
的 start
参数大于 end
,则参数会被交换。但 slice()
不会发生这种情况。
此外,如果 substring()
的给定参数为负数,则它将被视为 0
,这与从字符串末尾开始计数的 slice()
不同。
'Hello'.slice(2, 0)
>>> ''
'Hello'.substring(2, 0)
'He'
'Hello'.slice(-2, -1)
>>> 'l'
'Hello'.substring(-2, -1)
>>> ''