根據(字符 / 字節)數分段截取字符串

一、JS字符串截取函數substring()、substr()、slice()的區別

【1】substring()

substring()方法返回一個索引和另一個索引之間的字符串,語法如下:

str.substring(indexStart, [indexEnd])

下面有七點需要注意:

  1. indexStart需要截取字符串的起始位置,從零開始; indexEnd需要截取字符串的結束位置,從零開始
  2. substring()截取從 indexStart 到 indexEnd 前一位的字符串,不包括 indexEnd
  3. 如果爲indexStart 等於indexEnd,substring()返回一個空字符串。
  4. 如果indexEnd省略,則將substring()字符提取到字符串的末尾。
  5. 如果任一參數小於0或是NaN,它被視爲爲0。
  6. 如果任何一個參數都大於str.length,則被視爲是str.length。
  7. 如果indexStart大於indexEnd,那麼效果substring()就好像這兩個論點被交換了一樣; 例如: str.substring(1, 0) == str.substring(0, 1)

以下是一些示例代碼:

let str = 'ABCDEFGHIJ';
console.log(str.substring(1, 2));   // 'B'
console.log(str.substring(1, 1));   // ''
console.log(str.substring(-3, 2));  // 'AB'
console.log(str.substring(-3));     // 'ABCDEFGHIJ'
console.log(str.substring(1));      // 'BCDEFGHIJ'
console.log(str.substring(-20, 2)); // 'AB'
console.log(str.substring(2, 20));  // 'CDEFGHIJ'
console.log(str.substring(20, 2));  // 'CDEFGHIJ'

【2】substr()

substr()方法返回從指定位置開始的字符串中指定字符數的字符,語法如下:

str.substr(start, [length])

下面有五點需要注意:

  1. start 所需字符串的起始位置,從零開始; length在返回的字符串中應該包括的字符個數。
  2. substr()會從start獲取長度爲length字符(如果截取到字符串的末尾,則會停止截取)。
  3. 如果start是正的並且大於或等於字符串的長度,則substr()返回一個空字符串。
  4. 若start爲負數,則將該值加上字符串長度後再進行計算(如果加上字符串的長度後還是負數,則從0開始截取)。
  5. 如果length爲0或爲負數,substr()返回一個空字符串。如果length省略,則將substr()字符提取到字符串的末尾。

以下是一些示例代碼:

let str = 'ABCDEFGHIJ';
console.log(str.substr(1, 2));   // 'BC'
console.log(str.substr(-3, 2));  // 'HI'
console.log(str.substr(-3));     // 'HIJ'
console.log(str.substr(1));      // 'BCDEFGHIJ'
console.log(str.substr(-20, 2)); // 'AB'
console.log(str.substr(20, 2));  // ''

【3】slice()

slice()方法返回一個索引和另一個索引之間的字符串,語法如下:

str.slice(beginIndex, [endIndex])

下面有四三點需要注意:

  1. 若beginIndex爲負數,則將該值加上字符串長度後再進行計算(如果加上字符串的長度後還是負數,則從0開始截取)。
  2. 如果beginIndex大於或等於字符串的長度,則slice()返回一個空字符串。
  3. 如果beginIndex大於endIndex,則slice()返回一個空字符串。
  4. 如果endIndex省略,則將slice()字符提取到字符串的末尾。如果爲負,則將該值加上字符串長度後再進行計算

以下是一些示例代碼:

let str = 'ABCDEFGHIJ';
console.log(str.slice(1, 2));   // 'B'
console.log(str.slice(-3, 2));  // ''
console.log(str.slice(-3, 9));  // 'HI'
console.log(str.slice(-3));     // 'HIJ'
console.log(str.slice(-3, -1)); // 'HI'
console.log(str.slice(0, -1));  // 'ABCDEFGHIJ'
console.log(str.slice(1));      // 'BCDEFGHIJ'
console.log(str.slice(-20, 2)); // 'AB'
console.log(str.slice(20));     // ''
console.log(str.slice(20, 2));  // ''

二、根據字符個數截取字符串

    /* 
      str: 原始字符串
      startIndex: 開始截取位置
      length: 截取字符長度
    */
    function getNewStr(str, startIndex, length) {
      return str.substring(startIndex, startIndex + length)
    }

    function getNewStr(str, startIndex, length) {
      return str.substr(startIndex, length)
    }

    function getNewStr(str, startIndex, length) {
      return str.slice(startIndex, startIndex + length)
    }

    let str = '666666哈哈哈減肥emmm好餓吖想喫飯tototototo胖胖胖胖胖胖胖aaaaa啊啊啊啊啊'
    console.log(getNewStr(str, 0, 10))  // 666666哈哈哈減

三、根據字符個數分段截取字符串

     /* 
      str: 原始字符串
      len: 分段截取字符長度
    */
     function getNewStrArr(str, len) {
      let n = Math.ceil(str.length / len) ;
      let strArr = [];
      for (let i = 0;  i < n; i++) {
        let newStr = str.substring(len * i, len* (i + 1));
        strArr.push(newStr);
      }
      return strArr
    }
    let str = '666666哈哈哈減肥emmm好餓吖想喫飯tototototo胖胖胖胖胖胖胖aaaaa啊啊啊啊啊'
    console.log(getNewStrArr(str, 10)) //  ["666666哈哈哈減", "肥emmm好餓吖想喫", "飯totototot", "o胖胖胖胖胖胖胖aa", "aaa啊啊啊啊啊"]

四、根據字節個數截取字符串

     /* 
      str: 原始字符串
      len: 截取字節長度
    */
    function reBytesStr(str, len) {
      if (!str || str == undefined) return '';
      let num = 0;
      let result = '';
      for (let i = 0; i < str.length; i++) {
        num += ((str.charCodeAt(i) > 255) ? 2 : 1); // 中文兩個字節,英文一個字節
        if (num > len) {
          break;
        } else {
          result = str.substring(0, i + 1);
        }
      }
      return result;
    }
    let str = '666666哈哈哈減肥emmm好餓吖想喫飯tototototo胖胖胖胖胖胖胖aaaaa啊啊啊啊啊'
    console.log(reBytesStr(str, 10)) // 666666哈哈

五、根據字節個數分段截取字符串

    /* 
     str: 原始字符串
     len: 分段截取字節長度
    */
    let arr = []
    function reBytesStrArr(str, len) {
      if (!str || str == undefined) return '';
      let num = 0;
      let result = '';
      for (let i = 0; i < str.length; i++) {
        num += ((str.charCodeAt(i) > 255) ? 2 : 1);
        if (num > len) {
          break;
        } else {
          result = str.substring(0, i + 1);
        }
      }
      arr.push(result)
      let item = str.split(result)
      let nextStr = item.join("")
      reBytesStrArr(nextStr, 10)
      return arr;
    }
    let str = '666666哈哈哈減肥emmm好餓吖想喫飯tototototo胖胖胖胖胖胖胖aaaaa啊啊啊啊啊'
    console.log(reBytesStrArr(str, 10)) // ["666666哈哈", "哈減肥emmm", "好餓吖想喫", "飯totototo", "to胖胖胖胖", "胖胖胖aaaa", "a啊啊啊啊", "啊"]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章