1. 程式人生 > 其它 >【ES6】字串擴充套件

【ES6】字串擴充套件

字串

一、字串的遍歷介面 for...of

ES6 為字串添加了遍歷器介面,字串可以被 for...of 迴圈遍歷

二、字串的新增方法

查詢字串中是否包含指定字串:

includes

startsWith

endsWith

字串匹配:

matchAll 內容匹配

replaceAll 替換內容

消除空格:

trimStart

trimEnd

複製字串:

repeat

補全字串長度:

padStart

padEnd

1. 查詢字串中是否包含指定字串

includes

是否找到了引數字串,返回 true / false

startsWith

是否以引數字串開頭,返回 true / false

endsWith

是否以引數字串結尾,返回 true / false

const str = "我是小新的朋友,我叫風間。";
str.includes("朋友"); // true
str.endsWith("。"); // true

str.includes("朋友", 7); // false(7 表示從第7個位置開始搜尋,即從逗號到字串結束之間搜尋)
str.startsWith(",", 7); // true (同上)
str.endsWith("小新", 4); //true(4 表示前4個位置上,即子串“我是小新”)

這三個方法都支援第二個引數,includes、startsWith 的第二個引數表示開始搜尋的位置。endsWith 的第二個引數 n 表示前 n 個位置(包括 n)。

補充: indexOf() 和 lastIndexOf() 這兩個方法是查詢字元首次出現的位置,不存在則返回 -1 。

2. 字串匹配

matchAll

返回一個正則表示式在當前字串的所有匹配。

補充: match() 查詢字串中特定的字元,存在則返回該字元,不存在則返回 null 。

replaceAll

一次性替換所有匹配。用法同 replace() ,返回一個新字串,不會改變原字串。

補充:replace() 只能替換第一個匹配。如果要替換所有的匹配,不得不使用正則表示式的g修飾符。

"大大怪".replace("大", "小"); // 小大怪(只將第一個 “大” 替換成了 “小” )

"大大怪".replace(/大/g, "小"); // 小小怪(使用正則表示式中的 g 修飾符,將 “大” 全域性替換成 “小” )

"大大怪".replaceAll("大", "小"); // 小小怪

replaceAll() 第一個引數可以是字串,也可以是帶有 g 修飾符的正則表示式。如果是正則表示式,但沒有 g 修飾符,會報錯。

這點與 replace() 不同,replace() 正則表示式不帶 g 修飾符,不會報錯。

第二個引數是一個字串,表示替換的文字,其中可以使用一些特殊字串:

// $&:

// $`:

// $':

// $n:

// $$:指代美元符號$
"大大怪將軍".replaceAll("大","$$"); // $$怪將軍(將所有的 “大” 替換成美元符號 $ )

第二個引數還可以是函式:

3. 消除空格

trimStart

只消除字串頭部的空格。別名:trimLeft()

trimEnd

只消除字串尾部的空格。別名:trimRight()

trimStart() 和 trimEnd() 返回的都是新字串,不會修改原始字串。除了空格鍵,這兩個方法對字串頭部(或尾部)的 tab 鍵、換行符等不可見的空白符號也有效。

補充: trim() 消除字串前後空格。

4. 複製字串

repeat

將字串重複 n 次,並返回新字串。

  • 引數為 0,則返回空字串。
  • 引數為負數或者 Infinity 則會報錯。
  • 引數是字串,則會先轉換成數字。
  • 引數為小數,會先取整。
  • 引數是 0 到-1 之間的小數,則等同於 0(先取整:-0, 視為 0)。
const str = "哈";
str.repeat(3); // 哈哈哈

str.repeat(0); // ""
str.repeat(NaN); // ""

str.repeat("5"); // 哈哈哈哈哈(引數為字串,會先將其轉為數字)
str.repeat("ha"); // ""

5. 補全字串長度

padStart

用於頭部補全長度。

"09-12".padStart(10, "YYYY-MM-DD") // "YYYY-09-12"

padStart() 常見用途是為數值補全指定位數,另一個用途是提示字串格式。

padEnd

用於尾部補全長度。

padStart() 和 padEnd() 一共接受兩個引數,第一個引數是字串補全生效的最大長度,第二個引數是用來補全的字串。

"a".padStart(3, "b"); // "bba"
"a".padEnd(3, "b"); // "abb"
"a".padStart(2); // " a"(如果沒有第二個引數,則預設使用空格補全)

"abcd".padStart(2, "e"); // "abcd"(如果原字串:abcd 的長度等於或大於指定最大長度:2 ,則補全無效,返回原字串:abcd )

"AB".padEnd(4,"CDEFG"); // "ABCD"(如果原字串:AB 補上指定字串:CDEFG 後的新字串:ABCDEFG 長度大於指定最大長度:4 ,則會截斷,返回符合指定最大長度的新字串:ABCD )

補充:不常用的方法:

  • String.fromCodePoint() 用於從 Unicode 碼點返回對應字元,該方法定義在 String 物件上。
  • String.raw() 該方法返回一個斜槓都被轉義(即斜槓前面再加一個斜槓)的字串,往往用於模板字串的處理方法。
  • codePointAt() 能夠正確處理 4 個位元組儲存的字元,返回一個字元的碼點。正確返回 32 位的 UTF-16 字元的碼點。測試一個字元由兩個位元組還是由四個位元組組成的最簡單方法。
  • normalize() 用來將字元的不同表示方法統一為同樣的形式,這稱為 Unicode 正規化。