第2章 字符串和正則表達式
1.在ECMAScript6出現以前,JavaScript字符串一直基于16位字符編碼(UTF-16)進行構建.
2.新增了完全支持UTF-16的 codePointAt() 方法
這個方法接受編碼單元的位置而非字符位置作為參數, 返回與字符串中給定位置對應的碼位,即一個整數值
let text = '??';
console.log(text.codePointAt(0)); // 134071
3.和上面方法相反
使用String.fromCodePoint()方法根據指定的碼位生成一個字符
console.log(String.fromCodePoint(134071)); // '??'
4.字符串添加一個normalize()方法,它可以提供Unicode的標準化形式
方法接受一個可選參數,指明應用以下某種 Unicode 標準化形式: ('NFC', 'NFD', 'NFKC', 'NFKD')
如果開發一款國際化的應用,那么normalize()方法就有用得多了
注釋: 切記在進行排序和比較操作前,將被操作字符串按照統一標準進行標準化
5.正則表達式u修飾符
let text = '??';
console.log(text.length); // 2
console.log(/^.$/.test(text)); // false
console.log(/^.$/u.test(text)); // true
6.字符串中的子串識別
- includes(), 在字符串檢測, 結果true/false
- startsWith(), 在字符串起始位置檢測, 結果 true/false
- endsWith(), 在字符串結束位置檢測, 結果 true/false
注釋: 以上方法不能處理傳入正則, 而舊方法indexOf(), lastIndexOf()把傳入的正則表達式轉化為一個字符串并搜索它.
7.repeat(), 參數number. 表示該字符串的重復次數
console.log('x'.repeat(3)); // 'xxx';
8.正則表達式 y 修飾符
- 它會影響正則表達式搜索過程中的 sticky 屬性, 它通知搜索從正則表達式的lastIndex屬性開始進行.
- 檢測y修飾符是否存在
let pattern = /hello\d/y
console.log(pattern.sticky); // true
9.正則表達是我的復制
- 在ECMAScript5中, 可以通過給RegExp構造函數傳遞正則表達式作為參數,來復制這個正則表達式
var re1 = /ab/i, re2 = new RegExp(re1); // 可以
re3 = new RegExp(re1, 'g'); // 在ES5中拋出錯誤, 在ES6中正常運行(可以通過第二個參數修改其修飾符)
10.flags 屬性
ES6中可以通過訪問flags返回當前正則表達式的修飾符字符串
let re = /ab/g;
console.log(re.source); // 'ab'
console.log(re.flags); // 'ab'
11.模板字面量
- 基本語法
let message = `hello world`;
- 多行字符串
ES5:
var message = "multiline \n
string"
ES6:
let message = `multiline
string`
注意點: 在反撇號中的所以空白符都屬于字符串中的一部分
- 字符串占位
let name = 'hello';
message = `${name}, world`;
console.log(message); // hello, world