【ES6系列】RegExp

一、正則表達式:y 修飾符 (sticky 粘連)

const s = 'aaa_aa_a'
const r1 = /a+/g // 第一次匹配之後,從剩餘的字符裏匹配 
const r2 = /a+/y // y修飾符 sticky 粘連:第一次匹配之後,接下來從緊跟着的字符開始匹配。適合業務場景:連續匹配 一定程度上等同於 ^ $
console.log(r1.exec(s)) // aaa
console.log(r2.exec(s)) // aaa
console.log(r1.exec(s)) // aa
console.log(r2.exec(s)) // null

二、ES5 如何在正則中處理中文問題?如果是多個字節呢?ES6如何實現?

// unicode 國際編碼標準 u 修飾符, "Unicode模式",用來正確處理大於 \uFFFF 的Unicode字符
let s = '𠮷'
// let s2 = '\uD842\uDFB7'
// console.log(/^\uD842/.test(s2)) // true
// console.log(/^\uD842/u.test(s2)) // false

// . 匹配任意字符
// console.log(/^.$/.test(s)) 
// console.log(/^.$/u.test(s))
// unicode 碼點識別碼點值
// console.log(/\u{20BB7}/u.test(s))
// console.log(/\u{61}/u.test('a'))

// 量詞
// console.log(/𠮷{2}/u.test('𠮷𠮷')) // true
// console.log(/𠮷{2}/.test('𠮷𠮷')) // false

// i 修飾符 忽略大小寫
console.log(/[a-z]/i.test('\u212A')) //false
console.log(/[a-z]/iu.test('\u212A')) //true

// ES6中正則後加u修飾符

延伸閱讀:

1、Unicode 及編碼方式概述

2、Unicode 轉 UTF-16 的轉碼公式

3、New regular expression features in ECMAScript 6

4、sticky

思考:

1、sticky 模式有什麼實際應用場景嗎?

2、上面提到的 \uD83D\uDC2A 是四個字節,加了u標識符會正確識別出是兩個字符,那麼在 JavaScript裏一個字符是幾個字節?

3、U+20BB7 是如何計算出“\uD842\uDFB7”的?

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