详解JS截取字符串的三个⽅法substring,substr,slice
⽬录
相同点
不同点
substring
语法
参数
说明
substr
语法
参数
说明
slice
语法
参数
说明
总结⼀下
js中有三个截取字符的⽅法,分别是substring()、substr()、slice(),平时我们可能都⽤到过,但总是会对这些⽅法有点混淆,特别是substring()和substr(),连⽅法名都差不多,下⾯就具体来看⼀下区别。
相同点
这三个⽅法都可以对字符串进⾏截取,并且返回⼀个新的字符串,也就是不会对原字符串进⾏修改。
这⾥ > 表⽰控制台输⼊,< 表⽰控制台输出,下同:
//chrome控制台
> var a = '0123456789'
< undefined
> a.substr(1,5)
< "12345"
> a
< "0123456789"  //没有发⽣改变
不同点
这三个⽅法的不同之处在于参数不同。
js在字符串中添加字符substring
substring() ⽅法⽤于提取字符串中介于两个指定下标之间的字符。
语法
string.substring(start,stop)
参数
参数描述
s tart必需。⼀个⾮负的整数,规定要提取的⼦串的第⼀个字符在string中的位置。
s top可选。⼀个⾮负的整数,⽐要提取的⼦串的最后⼀个字符在s tring中的位置多 1。如果省略该参数,那么返回的⼦串会⼀直到字符串的结尾。
说明
1.substring() ⽅法返回的⼦串包括 start 处的字符,但不包括 stop 处的字符。
//chrome控制台
> var a = '0123456789'
< undefined
> a.substring(1,5)
< "1234"
2.如果参数 start 与 stop 相等,那么该⽅法返回的就是⼀个空串(即长度为 0 的字符串)。
//chrome控制台
> var a = '0123456789'
< undefined
> a.substring(1,1)
< ""
3.如果 start ⽐ stop ⼤,那么该⽅法在提取⼦串之前会先交换这两个参数。
//chrome控制台
> var a = '0123456789'
< undefined
> a.substring(5,1)
//=>a.substring(1,5)
< "1234"
4.如果 start 和 stop 有负数,那么会把该参数⾃动转为0,然后继续上述规则。
//chrome控制台
> var a = '0123456789'
< undefined
> a.substring(5,-1)
//=> a.substring(5,0)
//=> a.substring(0,5)
< "1234"
5.如果 start 和 stop 有正⼩数(负数直接进⾏第4条),那么会把该参数向下取整,然后继续上述规则。
//chrome控制台
> var a = '0123456789'
< undefined
> a.substring(5,2.5)
//=> a.substring(5,2)
//=> a.substring(2,5)
< "234"
6.如果 start 和 stop 有字符串,那么会先进⾏parseInt(),如果转换结果为NaN,那么就转换为0,其余情况继续上述规则。//chrome控制台
> var a = '0123456789'
< undefined
> a.substring(5,'2.5')
//=> a.substring(5,2)
//=> a.substring(2,5)
< "234"
> a.substring(5,'ss')
//=> a.substring(5,NaN)
//=> a.substring(5,0)
//=> a.substring(0,5)
< "01234"
其他情况就没有⼀⼀测试了,当然正常情况下尽量不要这么⼲,毕竟语法上已经规定了是整数。
substr
substr() ⽅法可在字符串中抽取从 start 下标开始的指定数⽬的字符。
语法
string.substr(start,length)
参数
参数描述
start必需。要抽取的⼦串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。
也就是说,-1 指字符串中最后⼀个字符,-2 指倒数第⼆个字符,以此类推。
length可选。⼦串中的字符数。必须是数值。如果省略了该参数,那么返回从string的开始位置到结尾的字串。
说明
该⽅法与substring()最⼤的区别在于第⼆个参数是你需要截取字符串的长度,⽽不是位置。
1.substr() ⽅法返回的⼦串从 start 处的字符开始(包括)往后截取length长度,如果超过最末端就到最末端结束。
//chrome控制台
> var a = '0123456789'
< undefined
> a.substr(1,5)
< "12345"
> a.substr(1,15)
// 只会到最末端,多了没⽤
< "123456789"
2.start可以取负值,表⽰从字符串尾部往头部开始数(从右到左,注意是从1开始,⽐如-1 指字符串中最后⼀个字符),但是截取长度还是从左到右,如果超过最末端就到最末端结束。
//chrome控制台
> var a = '0123456789'
< undefined
> a.substr(-4,2)
// -4表⽰从右开始数第4个,就是'6',然后取2个长度的字符串,就是'67'
< "67"
3.如果length为负值,那么会直接当成0处理,最终返回""。
//chrome控制台
> var a = '0123456789'
< undefined
> a.substr(4,-2)
/
/=> a.substr(4,0)
< ""
4.如果start或者length为⼩数,那么会截取⼩数部分。
//chrome控制台
> var a = '0123456789'
< undefined
> a.substr(1.2,5.2)
//=> a.substr(1,5)
< "12345"
5.如果 start 和 length 有字符串,那么会先进⾏parseInt(),如果转换结果为NaN,那么就转换为0,其余情况继续上述规则。
//chrome控制台
> var a = '0123456789'
< undefined
> a.substr('aa','5')
//=> a.substr(0,5)
< "01234"
slice
slice() ⽅法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
语法
string.slice(start,end)
参数
参数描述
start必须。要抽取的⽚断的起始下标。如果是负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后⼀个字符,-2 指倒数第⼆个字符,以此类推。
end可选。紧接着要抽取的⽚段的结尾的下标。若未指定此参数,则要提取的⼦串包括start到原字符串结尾的字符串。如果该参数是负数,那么它规定的是从字符串的尾部开始算起的位置。
说明
该⽅法的两个参数均为位置坐标,和subtring⽐较像,区别就是该⽅法⽀持负数,并且不会交换位置,始终是从start到end,如果该区间不存在,那么返回''。
1.slice() ⽅法返回的⼦串包括 start 处的字符,但不包括end 处的字符。
//chrome控制台
> var a = '0123456789'
< undefined
> a.slice(1,5)
< "1234"
2.当start或者end为负值时,定位⽅式和substr⼀,从右往左数,从1开始。
//chrome控制台
> var a = '0123456789'
< undefined
> a.slice(1,-1)
//起始点从第1(包括)开始,结束点为从右往左数第1个(不包括)
< "12345678"
3.start到end的顺序始终是从左到右,如果最终start的位置在end的右边,那么返回''。
//chrome控制台
> var a = '0123456789'
< undefined
> a.slice(2,1)
//2所在的位置是'2',1所在的位置是'1',从2=>1,⽅向相反,返回为空
< ""
> a.slice(-2,1)
//-2所在的位置是'8',1所在的位置是'1',从8=>1,⽅向相反,返回为空
< ""
> a.slice(-2,-1)
//-2所在的位置是'8',-1所在的位置是'9',从8=>9,⽅向正常,返回为'8'
< "8"
4.其他情况和substring处理⽅式⼀致。
/
/chrome控制台
> var a = '0123456789'
< undefined
> a.slice('xx','5.5')
// => a.slice(0,5)
< "01234"
总结⼀下
从上⾯测试得出结论,substring不⽀持负值,其他两种⽅式均⽀持负数表⽰,并且是从右边第⼀位开始计数。
substr的第⼆个参数是长度,这是和其他两种⽅式最⼤的不同之处。
slice的⽅向性⽐较强,永远是从start=>end对应左=>右。
以上结论均在最新⾕歌浏览器上测试,IE和⽕狐未测试。
到此这篇关于详解JS截取字符串的三个⽅法substring,substr,slice的⽂章就介绍到这了,更多相关JS截取字符串内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。