JavaScript正则表达式是内建工具,可用字面量(/pattern/)或RegExp构造函数创建;静态模式用字面量,动态拼接用new RegExp()并注意双重转义;match()与exec()行为不同,replace()支持$1等捕获组引用。
JavaScript 正则表达式是内建的文本匹配与操作工具,不是额外库,直接用 RegExp 构造函数或字面量(如 /abc/)创建,所有字符串方法(match()、replace()、test() 等)都原生支持它。
字面量(/pattern/flags)写法简洁,适合静态模式;new RegExp( 适合动态拼接——比如从用户输入或变量中构建正则。但要注意:
)new RegExp("a.b") 中的点号会被 JS 字符串先转义一次,必须写成 "a\\.b" 才等价于字面量 /a\.b/。
/^[^\s@]+@[^\s@]+\.[^\s@]+$/
new RegExp(escapeRegExp(keyword), "gi"),其中 escapeRegExp() 需手动实现转义特殊字符g(全局)、i(忽略大小写)、m(多行)只能在字面量末尾或构造函数第二个参数传入,不能运行时修改match() 对带 g 标志的正则返回字符串数组(只含匹配内容),不带 g 则返回详细对象(含 index、input);而 exec() 总是返回详细对象,且会维护 lastIndex 属性,适合手动控制匹配位置。
str.match(/a/g)
reg.exec(str) 循环,注意每次调用前确认 reg.lastIndex = 0 或使用无 g 标志的正则while ((m = /a/g.exec(str)) !== null) —— 因为 /a/g 是字面量,每次都会新建实例,lastIndex 始终为 0,变成死循环replace() 的第二个参数可以是字符串或函数。字符串中 、 表示第一个、第二个捕获组(即括号内的子表达式)的匹配内容,$$ 表示单个 $ 字符。
立即学习“Java免费学习笔记(深入)”;
const text = "2025-12-25";
const result = text.replace(/(\d{4})-(\d{2})-(\d{2})/, "$2/$3/$1");
// → "12/25/2025"
$1、$2 等对应,否则显示为空字符串text.replace(/(\w+)/g, (match, p1) => `【${p1.toUpperCase()}】`)
a+b)不会产生捕获组,$1 无效真正难的不是写出一个能跑的正则,而是预判边界情况:比如 \d+ 会把 "abc123def" 中的 123 提出来,但若文本是 "123abc456",默认贪婪匹配会让它吃掉整个 123abc456(因为 \d+ 后没跟任何限定符)。这时候得用 \d+(?=[^0-9]|$) 或非贪婪 \d+?,具体选哪个,取决于你到底想切分还是提取。