zoukankan      html  css  js  c++  java
  • 字符串截取函数slice, substring, substr

      在日常项目需求中,常常会遇到需要截取字符串操作的工作,而ECMAScript为我们提供了原生的截取字符串的函数,而且提供了三个:slice, substring, substr。我们怎么判断在什么时候使用哪个字符串截取函数呢?

      其实,只要搞清楚这三者的区别,就比较容易能够判断什么情况下,使用哪个字符串截取的函数了。

      三者都是接受两个可选参数。

      最简单的情况下,没有传入任何参数,则这三者没有任何区别,类似于=操作符,直接复制了一个字符串出来。

      如果之传入一个参数,则直接取从参数开始到字符串结尾的字符串。遇到非正整数的参数,与两个参数的处理情况相同。

      str.slice(start, end)

      slice的参数start和end可接受任意非NaN数值的参数,取start到end之间的字符,不包含end。如果参数为负,则会自动加上str.length进行纠正,如果依然为负值,则修正为0。如果end值小于start则返回空字符串。

    console.log("abcdefghij".slice(3,1))            //      ''
    console.log("abcdefghij".slice(-3,-1))          //     'hi'
    console.log("abcdefghij".slice(1, 3))           //     'bc'
    console.log("abcdefghij".slice(-20, -8))        //     'ab'
    

     记住一个原则:如果end小于start,则返回空字符串。如果值为负数,加str.length纠正,依然为负,则调整为0。 

      str.substring(start, end)

      也是接受任意数值的参数,如果参数为0或者NaN的话,会自动修正为0;如果end小于start的话,两者位置颠倒。取start到end之间的字符,不包含end。  

    console.log("abcdefghij".substring(3,1))            //     'bc'
    console.log("abcdefghij".substring(-3,-1))          //     ''
    console.log("abcdefghij".substring(1, 3))           //     'bc'
    console.log("abcdefghij".substring(-20, -8))     //   '' 
    

      也有一个原则:就是两个参数当中较小的会自动调整当做start参数,任何非正整数,都会当做0处理。

      str.substr(start, length)

      从形参名称应该可以看出一点不同。substr第一个参数也是起始位置,但是第二个参数不是结束位置,而是需要截取多少个字符串。

      start如果为负数,则与slice传入负数参数一样处理,让其自身加str.length进行纠正,如果还小于0,则当做0处理。  

      length如果为0或者负数,则直接返回一个空字符串。  

    console.log("abcdefghij".substr(-13))            //  'abcdefghij'
    console.log("abcdefghij".substr(-13, 1))         //  'a'
    console.log("abcdefghij".substr(0, -1))          //  ''
    console.log("abcdefghij".substr(-1, 3))          //  'j'
    

      如此来看,就能够比较清楚的分辨出来三者之间的用法和区别了。

     

      

      

  • 相关阅读:
    nginx能访问html静态文件但无法访问php文件
    LeetCode "498. Diagonal Traverse"
    LeetCode "Teemo Attacking"
    LeetCode "501. Find Mode in Binary Search Tree"
    LeetCode "483. Smallest Good Base" !!
    LeetCode "467. Unique Substrings in Wraparound String" !!
    LeetCode "437. Path Sum III"
    LeetCode "454. 4Sum II"
    LeetCode "445. Add Two Numbers II"
    LeetCode "486. Predict the Winner" !!
  • 原文地址:https://www.cnblogs.com/zhuhuoxingguang/p/6269958.html
Copyright © 2011-2022 走看看