【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”的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值