博客
关于我
【ES6(2015)】RegExp
阅读量:516 次
发布时间:2019-03-08

本文共 2358 字,大约阅读时间需要 7 分钟。

ES6 对正则表达式的增强修饰符

正则表达式是 JavaScript 中非常强大的字符串操作工具。ES6 引入了一些新的修饰符,显著提升了其性能和灵活性。本文将详细探讨 yu 两个修饰符的作用及其应用场景。


1. y 修饰符

y 命名为“粘连”修饰符,表示在正则匹配过程中必须从最后一次匹配成功的下一个位置开始。与 g 修饰符类似,y 帮助开发者确保匹配总是从字符串的头部开始。

核心特性

  • 粘连匹配:在 lastIndex 指定位置的字符开始进行匹配,且必须在此位置找到所有可能的匹配段。
  • g 修饰符的区别g 表示从上次结束的下一个字符开始,而 y 强制要求匹配只能从 lastIndex 位开始。

示例演示

const s = 'aaa_aa_a';// 使用 `g` 修饰符const r1 = /a+/g;const match1 = r1.exec(s); // ['aaa']// 重复匹配,第二次从 'a' 开始const match2 = r1.exec(s); // ['aa']// 使用 `y` 修饰符const r2 = /a+/y;const match3 = r2.exec(s); // ['aaa']const match4 = r2.exec(s); // null// 示例说明:- `g` 修饰符会连续找出所有匹配,- `y` 修饰符则要求每次匹配必须从 `lastIndex` 定义的位置开始。

应用场景

当开发者需要确保正则匹配始终从字符串开头进行时,可以结合 y 修饰符和 lastIndex 属性来实现如下的场景:

const regexp = /a/g;// 指定开始位置为字符串的第二个字符(索引为 1)regexp.lastIndex = 1;// 从索引为 1 的位置开始匹配const match = regexp.exec('axxa'); // 'xx'// 最后索引位置更新到 4,现在尝试从 4 开始匹配,结果为 null

y 修饰符下,匹配只有在 lastIndex 指定的位置相符后才会继续进行,强调了从头部匹配的功能。


2. u 修饰符

u 代表“Unicode模式”,用于正确处理大于 \uFFFF 的 Unicode 字符。这种字符在传统的单字节编码系统中通常无法正确表示。

核心作用

  • UTF-16 编码支持:确保正则表达式能够正确识别和处理 Unicode 字符,特别是四字节的 UTF-16 字符。
  • 预定义模式的适用性:影响各类字符匹配行为,确保预定义模式如 \S 也能正确处理复杂的 Unicode 字符。

示例演示

// 示例 1:比较常见字符的识别const s = '𠮷'; // 代表一个 Unicode 猸子表情console.log(s.length); // 结果为 4(因为 UTF-16)console.log(/^\S$/u.test(s)); // 返回 true// 示例 2:使用 Unicode 表达式console.log(/^\u{61}/.test('a')); // 返回 false(不使用 u 修饰符)console.log(/^\u{61}/u.test('a')); // 返回 true

或者


3. u 修饰符的应用场景

1. 点字符匹配

u 修饰符的支持下,点字符 . 被明确限定为除了新线外的单个字符,但它仍需正确处理复杂的 Unicode 字符:

// 不使用 `u` 修饰符时:const s = '𠮷';'^.$.test(s); // 返回 false(被识别为两个字符)// 使用 `u` 修饰符:'^.$/u.test(s); // 返回 true

2. Unicode 字符表达式

使用 u 修饰符可以避免乱码问题,确保如 \u{61} 能够正确匹配字符 a

// 使用 `u` 修饰符:console.log(/\\u{61}/u.test('a')); // true

3. 量词应用

u 修饰符下,量词对 Unicode 字符的处理更加准确:

// 单个字符匹配const s = '🐪🐪';console.log(/a{2}/u.test(s)); // 返回 true

4. 预定义模式优化

确保预定义模式能够正确处理复杂的 Unicode 字符:

// 不使用 `u` 修饰符:console.log('𠮷'.match(/\S/gi)); // null// 使用 `u` 修饰符:console.log('𠮷'.match(/\S/giu)); // 返回 [ '𠮷' ]

4. 使用 uy 修饰符的组合

结合 uy 修饰符可以实现更复杂的匹配需求。例如,可以自动识别字符串中所有UTF-16字符并按字节数进行统计:

const s = '𠮷𠮷';// 定义一个分别统计字符数量的函数function codePointLength(text) {    const result = text.match(/[\s\S]/gu);    return result ? result.length : 0;}console.log(s.length);    // 8console.log(codePointLength(s)); // 2

示例总结:

  • y修饰符在字符串匹配时强制要求从 lastIndex 开始。
  • u修饰符允许正则表达式正确处理复杂的 Unicode 字符。
  • y + u 结合使用,能够实现更高级的字符串操作需求。

这两个修饰符的理解和应用,对于从亚洲扩展正则表达式能力至关重要。

转载地址:http://pjrnz.baihongyu.com/

你可能感兴趣的文章
【leetcode】Shuffle an Array 打乱一个没有重复元素的数组
查看>>
[notes] JSON notes
查看>>
[设计模式]代理模式
查看>>
[设计模式]策略模式(strategy)---算术运算
查看>>
设计模式之——桥接模式(Bridge)
查看>>
高性能MySQL——第三章服务器性能剖析
查看>>
【PTA】 敲笨钟 (20 分)
查看>>
nuxt.js项目在启动时设置默认跳转页面
查看>>
信号和槽
查看>>
Buck_Boost电路分析 亲测
查看>>
redis只能做缓存?你错了
查看>>
材料学博士转型大数据开发,是一种什么体验?
查看>>
16-Android屏幕亮度调节
查看>>
17-Android系统应用默认开机启动
查看>>
Android Launcher 之源码下载
查看>>
设计模式(18)——中介者模式
查看>>
net start mysql 发生系统错误2 系统找不到指定的文件
查看>>
发工资的骚操作。。
查看>>
送一个ipad【最后一个】
查看>>
重磅!大数据《实战全栈工程师成长手册》,附 PDF & PPT 下载
查看>>