JavaScript正则表达式是高效处理字符串验证、提取、替换和分割的工具,核心在于正确编写模式、选择合适方法(如test()用于验证、match()用于提取)并理解标志(g/i/m)与元字符(\d/\w/\s/.等)行为。

JavaScript 正则表达式(RegExp)是处理字符串验证、提取、替换和分割的高效工具。核心在于写对模式、选对方法,并理解匹配行为(全局、忽略大小写、多行等)。用得好,几行代码就能替代大量 if 判断和循环。
掌握基本语法和标志
正则表达式由模式(pattern)和可选标志(flags)组成,可写作字面量形式 /pattern/flags 或构造函数 new RegExp('pattern', 'flags')。
-
常用标志:
g(全局匹配)、i(忽略大小写)、m(多行模式,让^和$匹配每行起止) -
基础元字符:
\d(数字)、\w(单词字符)、\s(空白符)、.(除换行外任意字符)、^(开头)、$(结尾) -
量词要谨慎:
*(0次或多次)、+(1次或多次)、?(0次或1次),默认贪婪匹配;加?变懒惰,如.*?
验证字符串:用 test() 和 match() 判断合规性
验证场景(如邮箱、手机号、密码强度)优先用 RegExp.prototype.test()——返回布尔值,性能好、语义清晰。
- 邮箱验证示例:
/^[^\s@]+@[^\s@]+\.[^\s@]+$/i.test(email)(注意:真实邮箱规则极复杂,此为简化版,生产环境建议用专用库或后端校验) - 密码至少8位、含大小写字母和数字:
/(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}/.test(pwd)(利用正向先行断言(?=...)检查多个条件) - 避免只用
match()做验证——它返回数组或 null,需额外判空;test()更直接
提取内容:用 match()、exec() 和 replace() 精准抓取
从文本中抽关键信息(如URL、日期、ID),关键是设计带捕获组 (...) 的模式,并配合合适方法。
立即学习“Java免费学习笔记(深入)”;
-
str.match(/(\d{4})-(\d{2})-(\d{2})/)返回数组:["2023-12-25", "2023", "12", "25"],下标 1~3 是各组内容 - 全局提取多个匹配项,必须加
g标志:"a1 b2 c3".match(/\d/g)→["1","2","3"] - 需要逐个处理匹配(如带位置信息),用
exec()循环调用(它会更新lastIndex);replace()第二参数可为函数,接收捕获组作为参数,适合动态替换
避开常见坑:转义、性能与可读性
正则容易写出却难维护,几个关键细节决定成败:
-
字符串中反斜杠要双写:用
new RegExp('\\d+'),因为字符串先解析一次转义,再传给 RegExp -
避免过度回溯:嵌套量词如
(a+)+b在长字符串上可能引发“灾难性回溯”,导致卡死;优先用原子组或固化分组(ES2024+ 支持(?>...)) -
提升可读性:复杂正则拆成多行加注释(用
/x标志需浏览器支持,更推荐用变量拼接 + 注释说明逻辑) - 别迷信正则万能:解析 HTML/XML、嵌套括号结构等,正则力不从心,应选专用解析器











