JavaScript正则表达式可通过字面量(/pattern/flags)或构造函数(new RegExp('pattern','flags'))创建,常用标志有g、i、m、s;核心元字符如\d、\w、+、*、?及分组()、(?:…)、(?…)提升匹配精度;高频操作包括验证、提取、替换、分割;需注意lastIndex状态、中文需u标志、避免用正则解析嵌套结构。
JavaScript 正则表达式(RegExp)是处理字符串的强大工具,掌握基础语法和实用技巧能显著提升文本匹配、提取与替换效率。关键不在于死记所有符号,而在于理解常见场景下的组合逻辑和避坑要点。
正则表达式在 JS 中可通过字面量或构造函数创建:
/pattern/flags,如 /\d+/g 匹配一个或多个数字,全局搜索;new RegExp('pattern', 'flags'),适合 pattern 来自变量或需动态拼接的场景(注意:反斜杠需双写,如 new RegExp('\\d+', 'g'))。常用 flags(标志):g(全局)、i(忽略大小写)、m(多行模式,使 ^ 和 $ 匹配每行起止)、s(dotAll 模式,让 . 匹配换行符)。
不必背全表,优先掌握高频组合:
\d 等价 [0-9],\w 匹配字母、数字、下划线(含中文需加 u 标志);+(1次以上)、*(0次以上)、?(0或1次),默认贪婪匹配;加 ? 变懒惰,如 .*? 匹配最短可能;() 捕获分组,match() 或 exec() 返回数组中包含子匹配项;非捕获组用 (?:...),避免干扰索引;/(?\d{4})-(?\d{2})/ ,结果可通过 result.groups.year 直接访问。多数需求围绕“找、提、替、验”展开:
/^[^\s@]+@[^\s@]+\.[^\s@]+$/(生产环境建议用更严谨库,正则校验不能替代后端验证);https?:\/\/([^\/\s]+),配合 exec() 获取 match[1];
replace() + 函数回调,如将驼峰转中划线:str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();'a,b;c'.split(/([;,])/) 得到 ['a', ',', 'b', ';', 'c']。这些点常导致结果不符合预期:
g 或 y 标志时多次调用 exec() 会继续上次位置——重用前记得手动置零或改用 match();test() 和 search() 不受 lastIndex 影响,但 test() 在全局正则上连续调用可能返回交替结果(因状态残留);u 标志,否则 \w、\b 等对 Unicode 字符行为异常;不复杂但容易忽略。