Javascript 字符串

字符串在JS中是一種基礎類型,也是很長用的一種類型,但是他有很多自己的方法可以使用,下面進行一下總結。

  1. length: 獲取字符串的長度

    'hello world'.length    // 11
    
  2. charAt(): 返回在指定位置的字符

    'hello world'.charAt(4)   // o
    
  3. charCodeAt(): 返回指定位置的字符的 Unicode 編碼。這個返回值是 0 - 65535 之間的整數。

    'hello world'.charCodeAt(4)   // 111
    

4.concat():連接兩個或多個字符串

  'hello world'.concat('123', '456')   // hello world123456

一般使用+進行字符串的拼接,在ES6中可以使用``模版處理字符串拼接問題,更高效,方便。

  1. fromCharCode(): 可接受一個指定的 Unicode 值,然后返回一個字符串,是charCodeAt的逆過程。

     String.fromCharCode(72,69,76,76,79)   // 'HELLO'
    
  2. indexOf(): 可返回某個指定的字符串值在字符串中首次出現的位置

     'hello world'.indexOf('l', 1)     // 2
    
  3. toLowerCase(): 把字符串轉換為小寫

     'HELLO WORLD'.toLowerCase() // hello world
    
  4. toUpperCase() : 把字符串轉換為大寫。

    'hello world'.toUpperCase() // HELLO WORLD

以上方法比較使用起來比較容易,下面介紹的方法使用起來稍微復雜,replace, 但是也更長用到:

  1. split(): 把一個字符串分割成字符串數組
    用法:stringObject.split(separator,howmany)
    separator必需。字符串或正則表達式,從該參數指定的地方分割 stringObject。
    howmany可選。該參數可指定返回的數組的最大長度。如果設置了該參數,返回的子串不會多于這個參數指定的數組。如果沒有設置該參數,整個字符串都會被分割,不考慮它的長度。

    'hello world'.split(' ') // ['hello', 'world']
    'hello world'.split(/\s/) // ['hello', 'world']
    'hello world'.split(' ' , 1) // ['hello']
    

String.split() 執行的操作與Array.join 執行的操作是相反的

  1. seach(): 用于檢索字符串中指定的子字符串,或檢索與正則表達式相匹配的子字符串

    'hello world'.search('l') // 2
    'hello world'.search(/\s/) // 5
    

search()方法不執行全局匹配,它將忽略標志 g。它同時忽略 regexplastIndex 屬性,并且總是從字符串的開始進行檢索,這意味著它總是返回 stringObject 的第一個匹配的位置。

  1. substring(),slice()和substr()
    這兩個方法很相似,在這里對比說明一下。

substring(start, stop): 提取字符串中兩個指定的索引號之間的字符,不接受負參數
substr(start, length): 從起始索引號提取字符串中指定數目的字符

slice(start,end): 可提取字符串的某個部分,并以新的字符串返回被提取的部分
start:要抽取的片斷的起始下標。如果是負數,則該參數規定的是從字符串的尾部開始算起的位置。也就是說,-1 指字符串的最后一個字符,-2 指倒數第二個字符,以此類推
end: 緊接著要抽取的片段的結尾的下標。若未指定此參數,則要提取的子串包括 start 到原字符串結尾的字符串。如果該參數是負數,那么它規定的是從字符串的尾部開始算起的位置。

  '01234567'.slice(1, 4) // 123
  '01234567'.slice(-4) // 4567

其他情況請自己嘗試,大同小異。

String 對象的方法 slice()、substring() 和 substr() (不建議使用)都可返回字符串的指定部分。slice() 比 substring() 要靈活一些,因為它允許使用負數作為參數。slice() 與 substr() 有所不同,因為它用兩個字符的位置來指定子串,而 substr() 則用字符位置和長度來指定子串。

  1. match(): 方法可在字符串內檢索指定的值,或找到一個或多個正則表達式的匹配

    // 正則帶g
    var url = 'http://www.baidu.com?a=1&b=2&c=3';
    var reg = /([^?&=]+)=([^?&=])*/g;
    var result = url.match(reg);
    console.log(result); //["a=1", "b=2", "c=3"]
    // 正則不帶g
    var url = 'http://www.baidu.com?a=1&b=2&c=3';
    var reg = /([^?&=]+)=([^?&=])*/;
    var result = url.match(reg);
    console.log(result); //["a=1", "a", "1", index: 21, input: "http://www.baidu.com?a=1&b=2&c=3"
    

13.replace(): 用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串

用法: stringObject.replace(regexp/substr,replacement)

regexp/substr 必需。規定子字符串或要替換的模式的 RegExp 對象。

請注意,如果該值是一個字符串,則將它作為要檢索的直接量文本模式,而不是首先被轉換為 RegExp 對象。

replacement 必需。一個字符串值。規定了替換文本或生成替換文本的函數

如果regexp 具有全局標志g,那么replace() 方法將替換所有匹配的子串。否則,它只替換第一個匹配子串。

字符替換文本
$1、$2、...、$99 與 regexp 中的第 1 到第 99 個子表達式相匹配的文本。
$& 與 regexp 相匹配的子串。
$` 位于匹配子串左側的文本。
$' 位于匹配子串右側的文本。
$$ 直接量符號。

  'hello world'.replace(/(w)orld/, '$1!')  // hello w!
  'hello world'.replace(/(w)orld$/, '$&!') // hello world!
  'hello world'.replace(/(w)orld$/, '$`!') // hello hello !
  'hello world'.replace(/(w)orld/, "$'!") // hello !
  'hello world'.replace(/(w)orld/, "$$!") //hello $!

如果第二個參數傳入了一個函數,在這種情況下,每個匹配都調用該函數,它返回的字符串將作為替換文本使用。該函數的第一個參數是匹配模式的字符串。接下來的參數是與模式中的子表達式匹配的字符串,可以有 0 個或多個這樣的參數。接下來的參數是一個整數,聲明了匹配在 stringObject 中出現的位置。最后一個參數是 stringObject 本身。

   function replacer(match, p1, p2, p3, offset, string) {
    // p1 is nondigits, p2 digits, and p3 non-alphanumerics
    return [p1, p2, p3].join(' - ');
  }
  var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
  console.log(newString);  // abc - 12345 - #$*%`
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容