<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
js中有三個擷取字元的方法,分別是substring()、substr()、slice(),平時我們可能都用到過,但總是會對這些方法有點混淆,特別是substring()和substr(),連方法名都差不多,下面就具體來看一下區別。
這三個方法都可以對字串進行擷取,並且返回一個新的字串,也就是不會對原字串進行修改 。
這裡 > 表示控制檯輸入,< 表示控制檯輸出,下同:
//chrome控制檯 > var a = '0123456789' < undefined > a.substr(1,5) < "12345" > a < "0123456789" //沒有發生改變
這三個方法的不同之處在於引數不同。
substring() 方法用於提取字串中介於兩個指定下標之間的字元。
string.substring(start,stop)
引數 | 描述 |
---|---|
start | 必需。一個 非負的整數 ,規定要提取的子串的第一個字元在string中的位置。 |
stop | 可選。一個 非負的整數 ,比要提取的子串的最後一個字元在string中的位置多 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() 方法可在字串中抽取從 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() 方法可提取字串的某個部分,並以新的字串返回被提取的部分。
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擷取字串內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45