ES6字符串新增方法正則表達式
一,String.fromCodePoint():識別大於0xFFFF的字符,彌補了String.fromCharCode()方法的不足。函數
做用:返回對應碼點的字符串。測試
語法:code
String.fromCodePoint(0x20BB7)
// "𠮷"
String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y'
// true,多個參數會被合併成一個字符串輸出orm
二,String.raw():該方法返回一個斜槓都被轉義(即斜槓前面再加一個斜槓)的字符串,每每用於模板字符串的處理方法。字符串
做用:1,防止執行轉義字符;2,處理模板字符串。it
語法:console
1,String.raw`Hi\\n` === "Hi\\\\n" // true,用於防止執行轉義字符模板
2,造成模板字符串並執行變量
// `foo${1 + 2}bar`
// 等同於
String.raw({ raw: ['foo', 'bar'] }, 1 + 2) // "foo3bar"變量
三,String.codePointAt():正確處理 4 個字節儲存的字符,返回一個字符的碼點。
做用:找到對應位置的字符,而且返回該字符的碼點。
codePointAt()方法是測試一個字符由兩個字節仍是由四個字節組成的最簡單方法。
語法:
let s = '𠮷a';
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271
s.codePointAt(2) // 97
注意:
codePointAt可識別四個字節的字符。可是參數卻不對應字符串下標,此時若是想用字符串下標識別字符,須要使用for of,for of能夠識別四個字節的字符,而且循環變量對應字符串下標。
例如:
let ty = "𠮷a𠮷a𠮷a𠮷a𠮷a";//字符串長度爲10,可是字節長度是15
ty.codePointAt(1);//57271,讀取的是字符串中下標爲0的「𠮷」的第二個字符
ty.codePointAt(0);//134071,讀取的是字符串中下標爲0的「𠮷」的所有,由於該方法可識別四個字節的字符
1,for of
let s = '𠮷a';
for (let ch of s) {
console.log(ch.codePointAt(0).toString(16));
}
// 20bb7,是第一個字符
// 61,是第二個字符
2,forEach
let arr = [...'𠮷a']; // arr.length === 2
arr.forEach(
ch => console.log(ch.codePointAt(0).toString(16))
);
// 20bb7
// 61
四,String.normalize():爲了表示語調和重音符號。
'\u01D1'==='\u004F\u030C' //false,都是同一個字符
'\u01D1'.length // 1
'\u004F\u030C'.length // 2
1,直接提供字符
語法:'\u01D1'.normalize();
2,利用兩個字符進行組合
語法:'\u004F\u030C'.normalize();
注意:normalize()接受四個參數,NFC NFD NFKC NFKD;解析標準不一樣,返回的字符長度不一樣。
'\u004F\u030C'.normalize('NFC').length // 1
'\u004F\u030C'.normalize('NFD').length // 2
normalize方法目前不能識別三個或三個以上字符的合成。這種狀況下,仍是隻能使用正則表達式,經過 Unicode 編號區間判斷。
五,判斷字符串中是否有某個值:
語法:
String.includes():返回布爾值,表示是否找到了參數字符串。
String.startsWith():返回布爾值,表示參數字符串是否在原字符串的頭部。
String.endsWith():返回布爾值,表示參數字符串是否在原字符串的尾部。
三個函數都支持兩個參數:查找的字符,查找起始位置。
注意:endsWith(" ",n):是查找前n項,倒着查找。
六,String.repeat():方法返回一個新字符串,表示將原字符串重複n次。
語法:
'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""
返回值:是一個原字符串重複n次後生成的心字符串。
注意:小數次數會被取整;負數、Infinity報錯;字符串,則會先轉換成數字;0 到-1 之間的小數,則等同於 0,這是由於會先進行取整運算;參數NaN等同於 0。
七,若是某個字符串不夠指定長度,會在頭部或尾部補全:
adStart()用於頭部補全,padEnd()用於尾部補全。
做用:補全制定長度的字符串。
返回值:返回一個補全後的新字符串,原字符串不變。
注意:
1,原字符大於等於指定長度,返回原字符串;
2,補全字符串比指定長度大,截取補全字符串進行補全;
3,補全字符串被省略,空格補全;
4,經常使用:padStart()的常見用途是爲數值補全指定位數。下面代碼生成 10 位的數值字符串。
'1'.padStart(10, '0') // "0000000001"
'12'.padStart(10, '0') // "0000000012"
'123456'.padStart(10, '0') // "0000123456"
另外一個用途是提示字符串格式。
'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"
八,String.trimStart(),String.trimEnd():
它們的行爲與trim()一致,trimStart()消除字符串頭部的空格,trimEnd()消除尾部的空格。它們返回的都是新字符串,不會修改原始字符串。
trimLeft()是trimStart()的別名,trimRight()是trimEnd()的別名。
九,String.matchAll():正則表達式在當前字符串的全部匹配。