正则表达式提取方括号内文本及括号外最后字符串的实现方法
正则表达式解决方案
问题分析
你需要匹配带嵌套方括号的[xxx]内容(包括空括号),同时提取括号外的末尾文本。原正则/\[(.*?)\]/g因非贪婪匹配特性,遇到第一个]就终止匹配,无法处理嵌套括号,也未覆盖末尾文本的提取逻辑。
具体实现
1. 匹配所有[xxx]中的内容(支持一层嵌套括号)
使用正则:
\[([^\[\]]*(?:\[[^\[\]]*\][^\[\]]*)*)\]
\[:匹配开头的左方括号([^\[\]]*(?:\[[^\[\]]*\][^\[\]]*)*):捕获组,负责匹配括号内的内容:[^\[\]]*:匹配非括号的任意字符(?:\[[^\[\]]*\][^\[\]]*)*:匹配一层嵌套的[xxx]结构,后续可跟随非括号字符,支持重复匹配(满足你的示例中[5[any]]的嵌套场景)
\]:匹配结尾的右方括号
开启全局匹配g,可依次捕获到1、2、3、空字符串、5[any]。
2. 提取末尾的非括号文本
使用正则:
\s*([^\[\]]+)$
\s*:匹配开头的任意空白字符([^\[\]]+):捕获所有非括号的文本内容$:锚定字符串结尾位置,确保只匹配最后一段文本
3. 合并结果
将第一步捕获的所有内容,与第二步捕获的文本按换行拼接,即可得到你期望的输出。
示例验证
针对输入字符串:
[1] [2] [3] [] [5[any]] my text
第一步捕获内容依次为1、2、3、""、5[any];第二步捕获内容为my text,拼接后结果为:
1 2 3 5[any] my text
内容的提问来源于stack exchange,提问作者Vinit Solanki
相关产品推荐
相关产品推荐

