17370845950

正则表达式:JS中的模式匹配技巧
JavaScript中的正则表达式通过字面量或构造函数创建,常用标志位有g、i、m、u;利用捕获组()提取数据,非捕获组(?:)提升性能;常见应用包括邮箱、手机号匹配,URL参数提取及空白行过滤;结合replace与函数可实现动态替换,如驼峰转短横线、数字加倍等;复杂场景建议结合其他方法以保持代码可读性。

JavaScript 中的正则表达式是处理字符串匹配和替换的强大工具。掌握一些实用的模式匹配技巧,能显著提升文本处理效率。下面介绍几种常见且高效的用法。

基本语法与标志位

在 JS 中,正则表达式可以用字面量或构造函数创建:

  • /pattern/g —— 字面量形式,简洁直观
  • new RegExp("pattern", "g") —— 动态构建时更灵活

常用标志位包括:

  • g:全局匹配,查找所有匹配项
  • i:忽略大小写
  • m:多行模式,^ 和 $ 匹配每行开头结尾
  • u:启用 Unicode 模式,正确处理 emoji 和特殊字符

捕获与分组技巧

使用括号 () 可以创建捕获组,提取感兴趣的部分。

例如,从日期字符串中提取年月日:

const dateRegex = /(\d{4})-(\d{2})-(\d{2})/;const result = "2025-04-05".match(dateRegex);

result 数组中,index 1~3 分别对应年、月、日。

若不需要捕获,可用非捕获组 (?:...) 提升性能:

/https?:\/\/(?:www\.)?example\.com/

常用匹配模式实战

以下是一些高频使用场景及对应正则:

  • 邮箱验证:/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
  • 手机号(中国大陆):/^1[3-9]\d{9}$/
  • 提取 URL 参数:/(? 匹配参数值
  • 过滤空白行:/^\s*$/m 配合 replace 删除空行

注意转义特殊字符,如点号 \.、反斜杠 \\

replace 与函数替换

replace 方法结合正则和函数,可实现智能替换。

比如将驼峰命名转为短横线连接:

"myNameIsJohn".replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();

或使用函数动态处理:

text.replace(/\b\d+\b/g, match => parseInt(match) * 2);

函数接收匹配内容作为参数,返回替换值,灵活性更强。

基本上就这些核心技巧。正则虽强大,但也别过度依赖。复杂场景建议结合字符串方法或专用库处理,保持代码可读性。