String 中 slice、substring、substr 的使用方法
区别
slice
截取从
start
位置开始,end
位置结束(不包含 end) 的字符串,返回一个新字符串
若参数为负数,需要从尾部位置倒数负数参数长度
作为生效位置
start
大于end
,则返回空字符串
start
大于字符串长度,返回空字符串
substring
截取从
start
位置开始,end
位置结束(不包含 end) 的字符串,返回一个新字符串
不支持负数
,若有负数,将会重置为0
start
大于end
,会将两者位置对调
start
大于字符串长度,返回空字符串
substr
截取从
start
位置开始, 截取长度为length
,返回一个新字符串
若start
为负数,需要从尾部位置倒数start长度
作为生效位置
length 不支持负数
,若length
为负数,会被重置成0
,将返回空字符串
start
大于字符串长度,返回空字符串
备注:ECMAscript 没有对该方法进行标准化,因此反对使用它
一、slice
使用语法
s.slice(start, end)
说明
截取从
start
位置开始,end
位置结束(不包含 end) 的字符串,返回一个新字符串
若参数为负数,需要从尾部位置倒数负数参数长度
作为生效位置
start
大于end
,则返回空字符串
start
大于字符串长度,返回空字符串
例子
let s = '12345678'
应用场景
1. 没有参数, 从 0 开始到结束位置进行截取
s.slice() // s = '12345678' ---> '12345678'
2. 一个参数
2.1
正数:从 start 开始到结束位置进行截取,超出总长度,返回空字符串
s.slice(0) // s = '12345678' ---> '12345678'
s.slice(1) // s = '12345678' ---> '2345678'
s.slice(10) // s = '12345678' ---> ''
2.2
负数:若参数为负数,需要从尾部位置倒数 `负数参数长度` 作为生效位置
(可将负数参数与字符串长度相加即可得到生效数值)
s.slice(-2) // s.slice(6) ---> s = '12345678' ---> '78'
3. 两个参数
3.1
正数:从 start 开始到 end 位置进行截取
s.slice(1, 2) // s = '12345678' ---> '2'
3.2
负数:若参数为负数,需要从尾部位置倒数 `负数参数长度` 作为生效位置
(可将负数参数与字符串长度相加即可得到生效数值)
s.slice(5, -1) // s.slice(5, 7) ---> s = '12345678' ---> '67'
s.slice(-2, -1) // s.slice(6, 7) ---> s = '12345678' ---> '7'
s.slice(-1, -2) // s.slice(7, 6) ---> s = '12345678' ---> ''
二、substring
使用语法
s.substring(start, end)
说明
截取从
start
位置开始,end
位置结束(不包含 end) 的字符串,返回一个新字符串
不支持负数
,若有负数,将会重置为0
start
大于end
,会将两者位置对调
start
大于字符串长度,返回空字符串
例子
let s = '12345678'
应用场景
1. 没有参数, 从 0 开始到结束位置进行截取
s.substring() // s = '12345678' ---> '12345678'
2. 一个参数
2.1
正数:从 start 开始到结束位置进行截取,超出总长度,返回空字符串
s.substring(0) // s = '12345678' ---> '12345678'
s.substring(1) // s = '12345678' ---> '2345678'
s.substring(10) // s = '12345678' ---> ''
2.2
负数:若参数为负数,重置为 0
s.substring(-2) // s.substring(0) ---> s = '12345678' ---> '12345678'
3. 两个参数
3.1
正数:从 start 开始到 end 位置进行截取
start 若比 end 大,将会将两者位置对调
s.substring(1, 2) // s = '12345678' ---> '2'
s.substring(2, 1) // s.substring(1, 2) ---> s = '12345678' ---> '2'
3.2
负数:若参数为负数,重置为 0
start 若比 end 大,将会将两者位置对调
s.substring(5, -1) // s.substring(5, 0) ---> s.substring(0, 5) ---> s = '12345678' ---> '12345'
s.substring(-2, -1) // s.substring(0, 0) ---> s = '12345678' ---> '0'
三、substr
使用语法
s.substr(start, length)
说明
截取从
start
位置开始, 截取长度为length
,返回一个新字符串
若start
为负数,需要从尾部位置倒数start长度
作为生效位置
length 不支持负数
,若length
为负数,会被重置成0
,将返回空字符串
start
大于字符串长度,返回空字符串
例子
let s = '12345678'
应用场景
1. 没有参数, 从 0 开始到结束位置进行截取
s.substr() // s = '12345678' ---> '12345678'
2. 一个参数
2.1
正数:从 start 开始到结束位置进行截取,超出总长度,返回空字符串
s.substr(0) // s = '12345678' ---> '12345678'
s.substr(1) // s = '12345678' ---> '2345678'
s.substr(10) // s = '12345678' ---> ''
2.2
负数:若 start 为负数,需要从尾部位置倒数 `start长度` 作为生效位置
(可将 start 与字符串长度相加即可得到生效数值)
s.substr(-2) // s.substr(6) ---> s = '12345678' ---> '78'
3. 两个参数
3.1
正数:从 start 开始,截取长度为 length
s.substr(1, 2) // s = '12345678' ---> '23'
s.substr(2, 1) // s = '12345678' ---> '3'
3.2
负数:若 start 为负数,需要从尾部位置倒数 `start长度` 作为生效位置
(可将 start 与字符串长度相加即可得到生效数值)
若 length 为负数,会被重置成 0,将返回空字符串
s.substr(5, -1) // s.substr(5, 0) ---> s = '12345678' ---> ''
s.substr(-2, 1) // s.substr(6, 1) ---> s = '12345678' ---> '7'