极简三分钟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 破换行。"

相关推荐
Mintopia8 小时前
静态内容页该用HTML还是Next.js展示更好
前端·html·next.js
LYFlied9 小时前
【每日算法】LeetCode 226. 翻转二叉树
前端·算法·leetcode·面试·职场和发展
无名无姓某罗9 小时前
jQuery 请求 SpringMVC 接口返回404错误排查
前端·spring·jquery
霁月的小屋9 小时前
Vue响应式数据全解析:从Vue2到Vue3,ref与reactive的实战指南
前端·javascript·vue.js
李少兄9 小时前
深入理解 Java Web 开发中的 HttpServletRequest 与 HttpServletResponse
java·开发语言·前端
holidaypenguin9 小时前
antd 5 + react 18 + vite 7 升级
前端·react.js
小满zs9 小时前
Next.js第十五章(Image)
前端·next.js
tangbin5830859 小时前
iOS Swift 可选值(Optional)详解
前端·ios
孟祥_成都9 小时前
nest.js / hono.js 一起学!日志功能/统一返回格式/错误处理
前端·node.js
_膨胀的大雄_9 小时前
01-创建型模式
前端·设计模式