JavaScript正则表达式核心在于模式与标志组合,分字面量(/abc/gi)和构造函数(new RegExp('abc','gi'))两种创建方式,需掌握元字符、锚点、重复控制及test/exec/match/replace等方法差异,并注意中文匹配、安全转义与调试技巧。

JavaScript 的正则表达式(RegExp)是处理字符串匹配、提取、替换的高效工具,核心在于模式(pattern)和标志(flags)的合理组合。写对正则不难,关键是理解元字符含义、边界控制和常见陷阱。
基础写法:字面量 vs 构造函数
两种创建方式各有适用场景:
-
字面量写法:
/abc/gi—— 简洁,适合静态模式;斜杠间写模式,后面加标志(如i忽略大小写、g全局匹配、m多行模式) -
构造函数写法:
new RegExp('abc', 'gi')—— 动态生成正则时必须用,比如模式来自用户输入或变量;注意特殊字符需双反斜杠转义(如\d表示数字)
常用元字符与字符类要记牢
别死记硬背,按用途分组理解更稳:
-
单字符匹配:
.(除换行符外任意字符)、d(数字)、w(字母/数字/下划线)、s(空白符) -
位置锚点:
^(行首)、$(行尾)、(单词边界),例如/cat/只匹配独立单词 "cat",不匹配 "scatter" -
重复控制:
*(0次或多次)、+(1次或多次)、?(0或1次)、{2,5}(2到5次);默认贪婪匹配,加?变懒惰,如a+?
匹配与操作:test()、exec()、match()、replace()
不同方法返回结果不同,选错容易踩坑:
立即学习“Java免费学习笔记(深入)”;
-
regex.test(str)→ 返回true/false,适合条件判断(注意全局正则连续调用会因lastIndex变化导致结果异常) -
regex.exec(str)→ 返回匹配数组(含index、input等属性),全局模式下可循环调用获取所有匹配 -
str.match(regex)→ 非全局返回首个匹配详情;全局返回纯匹配字符串数组(无索引信息) -
str.replace(regex, replacement)→ 支持字符串或函数作为替换内容,函数参数含匹配项、分组、位置等,灵活做动态替换
实用小技巧与避坑提醒
写正则常被忽略但影响很大:
- 中文字符用
[u4e00-u9fa5]或 ES2018 的p{Script=Han}(需加u标志) - 匹配邮箱、手机号等复杂格式,优先考虑用成熟库(如 validator.js),自写正则易漏边界 case
- 用
RegExp.escape(需自行实现)转义用户输入的字符串,避免注入式正则攻击 - 调试建议:在浏览器控制台用
/pattern/gim.test('test string')快速验证;或使用在线工具如 regex101.com(选 JavaScript 引擎)


















