JavaScript正则关键在写对用稳:字面量适合静态,new RegExp适合动态但需双写反斜杠;match/exec/test/replace行为差异大;常见失败因转义、标志、边界处理不当;应平衡性能与可读性,复杂场景优先用专用解析器。
JavaScript
正则表达式
不是“写出来就能用”,关键在**边界控制、转义处理和标志位选择**。直接套用网上示例常导致
返回
、
返回
,或意外匹配过多内容。
怎么写反斜杠和特殊字符的字面量
JS 中正则有两种创建方式:
构造函数和字面量(
)。二者对反斜杠的处理不同,这是最常踩的坑。
字面量写法:
表示“一个或多个数字 + 点 + 一个或多个数字”,其中点
被当作元字符;要匹配真实的小数点,必须写成
(即用
)
构造函数写法:
—— 注意:字符串里反斜杠本身要转义,所以
得写成
,
得写成
如果正则里要匹配反斜杠本身(如 Windows 路径
),字面量写为
;构造函数则需四个反斜杠:
为什么
有时返回
,有时返回数组
的行为取决于是否启用
(全局)标志:
无
:返回数组(含
、
等属性),即使只匹配一次;未匹配则返回
有
:只返回纯匹配
字符串数组
,不带额外信息;未匹配仍为
想确保安全取值,别直接访问
,先判断
如何正确提取括号中的捕获组内容
用圆括号
定义捕获组后,匹配结果中对应位置是子匹配项。但注意:
比
更可靠,尤其带
时:
Trae win
Trae Windows 官方版本现已全面支持 Win10 和 Win11 系统(64位)。国内开发者可直接访问 Trae 中文官网(trae.cn 或 trae.com.cn),一键下载官方正版 .exe 安装包,享受国内直连的高速稳定体验。安装过程极其简便,双击即可运行,并支持一键无缝导入 VS Code 或 Cursor 的原有主题、快捷键及插件配置。登录支持手机号、微信或稀土掘金账号。内置免费的豆包与 DeepSeek 等顶级大模型,让你开箱即用,轻松开启高效的 AI 智能编程之旅。
下载
立即学习
“
Java免费学习笔记(深入)
”;
每次调用返回下一个匹配(含捕获组),适合循环提取
+
会丢弃所有捕获组信息
非捕获组用
避免污染结果数组长度
常见错误:忽略
、
和
的语义差别
不加锚点就容易“跨词匹配”或“部分命中”。比如验证
邮箱
格式,
会把
中的
当作合法匹配——因为它确实符合模式,但不是完整邮箱。
和
锚定整个字符串起止(常用于表单验证)
是单词边界,适用于在一段文本中找独立单词(如替换
但不碰
)
模糊搜索常用
,但性能差且易贪婪匹配过长;优先考虑更具体的替代,如
替代
匹配引号内内容
真正难的不是写出能跑的正则,而是写出**不误匹配、不漏匹配、不卡死引擎**的正则。尤其是嵌套结构(HTML 标签、括号配对)或变长重复,JS 原生正则并不支持递归匹配,这时候该换解析器,而不是硬刚
。
test()falsematch()nullRegExp/...//d+.d+/./d+.d+/.new RegExp("\d+\.\d+")."\."d"\d"C: empile.txt/C:\temp\file.txt/new RegExp("C:\\temp\\file\.txt")match()nullString.prototype.match()ggindexinputnullgnullresult[0]result && result[0]const str = "price: $19.99, discount: $5.50";
str.match(/$d+.d+/g); // ["$19.99", "$5.50"]
str.match(/$d+.d+/); // ["$19.99", index: 7, input: "...", groups: undefined]()exec()match()gexec()match()g(?:...)const re = /(w+): ($d+.d+)/g;
const str = "total: $123.45, tax: $12.30";
let match;
while ((match = re.exec(str)) !== null) {
console.log("key:", match[1], "value:", match[2]);
// → "key:" "total" "value:" "$123.45"
// → "key:" "tax" "value:" "$12.30"
}^$/w+@w+.w+/"abc@def.ghi.xyz""def.ghi"^$"cat""category".*[^"]*.*.*?