JS使用正则/\[[^\][]*]/g删除[]包裹内容失效如何修复?
问题原因
你当前使用的正则规则存在适配局限:
- 排除型字符组
[^\][]将[也加入了排除匹配范围,如果你的实际使用场景存在方括号嵌套(例如[a[b]c]test),正则只会匹配到第一个[到第一个内嵌[之间的内容,无法匹配完整的方括号包裹段,就会出现删除不全的问题 - 部分老旧JS运行环境对未转义的结尾方括号解析逻辑存在差异,也可能导致匹配失效
修复方案
无嵌套场景(绝大多数普通场景适用)
直接使用如下正则即可实现全局删除:
let string = '[abcd]word[efg]'; // 规则说明:匹配[开头,后续所有非]字符,直到遇到]为止,全局替换为空 string = string.replace(/\[[^\]]*\]/g, ''); console.log(string); // 输出:word
嵌套方括号场景
如果内容存在多层方括号嵌套,可通过多次替换实现完全删除:
let string = '[a[b[c]d]e]test[f]'; while (/\[[^\]]*\]/.test(string)) { string = string.replace(/\[[^\]]*\]/g, ''); } console.log(string); // 输出:test
如果被方括号包裹的内容包含换行符,给正则添加s修饰符即可兼容:/\[[^\]]*\]/gs
内容的提问来源于stack exchange,提问作者DerFrederikHD
相关产品推荐
相关产品推荐

