极简三分钟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 修饰符:点号匹配所有字符

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

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 破换行。"

相关推荐
qq_433502184 小时前
Codex cli 飞书文档创建进阶实用命令 + Skill 创建&使用 小白完整教程
java·前端·飞书
IT_陈寒4 小时前
为什么我的Vite热更新老是重新加载整个页面?
前端·人工智能·后端
一袋米扛几楼984 小时前
【网络安全】SIEM -Security Information and Event Management 工具是什么?
前端·安全·web安全
小陈工5 小时前
2026年4月7日技术资讯洞察:下一代数据库融合、AI基础设施竞赛与异步编程实战
开发语言·前端·数据库·人工智能·python
Cobyte5 小时前
3.响应式系统基础:从发布订阅模式的角度理解 Vue2 的数据响应式原理
前端·javascript·vue.js
竹林8185 小时前
从零到一:在React前端中集成The Graph查询Uniswap V3池数据实战
前端·javascript
Mintopia5 小时前
别再迷信"优化":大多数性能问题根本不在代码里
前端
倾颜5 小时前
接入 MCP,不一定要先平台化:一次 AI Runtime 的实战取舍
前端·后端·mcp
军军君015 小时前
Three.js基础功能学习十八:智能黑板实现实例五
前端·javascript·vue.js·3d·typescript·前端框架·threejs