如何使用正则表达式拆分[ab][ij][yz]类方括号文本为指定列表
方括号格式文本拆分通用正则方案
针对连续方括号包裹文本的拆分需求,以下正则写法简洁无冗余,适配绝大多数非嵌套的常规使用场景,不需要针对特定输入做额外调整。
提取结果保留外层方括号
使用正则:\[[^\[\]]+\]
匹配逻辑说明
\[转义匹配左方括号(方括号为正则特殊元字符,必须加反斜杠转义)[^\[\]]+匹配1个及以上、既不是左方括号也不是右方括号的任意字符,从根源避免跨括号误匹配\]转义匹配右方括号
效果
对示例输入[ab][ij][yz]做全局匹配,直接得到结果:["[ab]", "[ij]", "[yz]"]
提取结果仅保留括号内内容
使用正则:\[([^\[\]]+)\]
匹配逻辑说明
在上述正则的基础上,给括号内的内容段加了捕获分组,提取每个匹配项的1号分组内容即可。
效果
对示例输入[ab][ij][yz]做全局匹配后提取分组内容,直接得到结果:["ab", "ij", "yz"]
适配调整说明
- 如果需要兼容空方括号
[]的提取,把正则里的+(匹配1次及以上)改成*(匹配0次及以上)即可 - 该正则支持括号内包含空格、数字、特殊符号的场景,比如输入
[a!b][c d][12_3]也能正确拆分 - 如果输入中夹杂非方括号包裹的零散字符(比如
[ab]xxx[ij]),正则会自动跳过零散字符,只提取有效方括号段 - *注意:正则无法处理嵌套方括号场景(比如
[a[b]c]),如果存在嵌套结构,建议用简单的栈遍历逻辑做解析,常规场景下上述正则完全够用。
代码示例(JavaScript)
const testStr = "[ab][ij][yz]"; // 保留方括号的提取结果 const withBracket = testStr.match(/\[[^\[\]]+\]/g); console.log(withBracket); // 输出: ["[ab]", "[ij]", "[yz]"] // 仅保留括号内内容的提取结果 const innerContent = [...testStr.matchAll(/\[([^\[\]]+)\]/g)].map(match => match[1]); console.log(innerContent); // 输出: ["ab", "ij", "yz"]
内容的提问来源于stack exchange,提问作者Cole Henrich
相关产品推荐
相关产品推荐

