极简三分钟ES6 - 正则表达式的扩展

Unicode 支持:u 修饰符

作用:正确处理复杂的 Unicode 字符(如表情符号 𐐷)

传统问题

ES5 将 4 字节的 Unicode 字符(如 \uD83D\uDC2A)拆成两个字符

js 复制代码
/^\uD83D/.test('\uD83D\uDC2A'); // true(错误识别)

u 的改进

添加 u 后,正则将其视为一个整体字符

js 复制代码
/^\uD83D/u.test('\uD83D\uDC2A'); // false(正确识别)

其他增强

  • 点字符 . 可匹配 Unicode 字符:/^.$/u.test('🐱') // true
  • 正确计算 Unicode 字符串长度
js 复制代码
function length(str) {{
  return str.match(/./gu)?.length  || 0; // 使用 u 修饰符
}}
length('𠮷𠮷') // 2(传统方式返回 4)

粘连匹配:y 修饰符

作用 :强制从上一次匹配结束的位置开始匹配,类似"贪吃蛇"步步推进

对比 g 修饰符

  • g:全局匹配,跳过不匹配的位置。
  • y:必须连续匹配,否则失败。

应用场景

语法解析、模板引擎等需要严格连续匹配的场景

具名组匹配:给分组起名字

作用:用名字替代数字编号的分组,代码更易读

传统问题

分组只能通过 [1]、[2] 引用,顺序变动会导致错误

js 复制代码
const date = /(\d{4})-(\d{2})-(\d{2})/.exec('2025-09-05'); console.log(date[1]); // "2025"(但开发者需记住 1 是年份)

ES6 解决方案

使用 (?<组名>) 命名分组,通过 groups 属性访问

js 复制代码
const date = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/u.exec('2025-09-05'); console.log(date.groups.year); // "2025"(清晰直观)

其他一些实用扩展

s 修饰符:点号匹配所有字符

传统点号 . 不匹配换行符 \n,s 修饰符解决此问题

js 复制代码
/hello.world/.test('hello\nworld'); // false 
/hello.world/s.test('hello\nworld'); // true

正则属性扩展

  • sticky 属性:检测是否启用 y 修饰符(reg.sticky )
  • flags 属性:返回正则的修饰符字符串(如 "gu")
js 复制代码
const reg = /abc/gy;
console.log(reg.flags);  // "gy"

构造函数优化

支持直接复制正则表达式,并可覆盖修饰符

js 复制代码
const reg1 = /abc/i;
const reg2 = new RegExp(reg1, 'g'); // 复用 reg1 但改为 g 修饰符 

ES6 正则 vs ES5

特性 ES6 方案 ES5 限制
Unicode 支持 u 修饰符 无法识别 4 字节字符
连续匹配 y 修饰符(粘连匹配) 仅 g(可跳过字符)
分组可读性 具名组 (?<name>) 数字索引(易混乱)
换行符匹配 s 修饰符 点号不匹配 \n
修饰符检测 reg.flags 无直接获取方式

牢记

"u 治乱码,y 抓连续,具名分组不迷路,点号加 s 破换行。"

相关推荐
风骏时光牛马43 分钟前
AI稳定性治理体系构建与疑难问题深度分析
前端
IT_陈寒1 小时前
JavaScript的this坑人实录,这次我真的记下来了
前端·人工智能·后端
开开心心就好2 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
螺丝钉tina4 小时前
[Playwright] [02]常用命令与调试:Debug UI、Mode和 Trace Viewer
开发语言·javascript·测试工具·ui·自动化
PedroQue994 小时前
0.8.2 新增 backFallback 配置,无 tabbar 页返回无忧
前端·uni-app
淡漠的蓝精灵4 小时前
web.py:一个简单到极致的 Python Web 框架
开发语言·前端·python·其他
开开心心就好5 小时前
竖式除法出题工具,整除余数混合模式
运维·服务器·前端·javascript·ocr·perl·1024程序员节
起个名字费劲死了5 小时前
Halcon学习一:骰子识别
前端·python·学习
大江东去浪淘尽千古风流人物5 小时前
【HexVIO】DSP卸载双目惯性VIO:Hexagon向量化前端与单帧融合调度深度解析
前端·状态模式·slam·dsp·vio·hexagon·移动端加速
এ慕ོ冬℘゜5 小时前
JS 事件循环、宏任务微任务:单线程底层原理 + 执行顺序
开发语言·javascript·ecmascript