正则表达式提取问题:如何将{{number}}-{{$index}}拆分为目标数组
解决字符串提取为数组的正则问题
你的问题很典型——用正则提取成对的{{...}}子串时没拿到预期的数组结果,主要是因为正则的匹配模式和全局匹配规则没设置对。
问题分析
你写的正则({{).*?(}})存在两个关键问题:
- 没有启用全局匹配:默认情况下正则只会匹配第一个符合条件的子串,不会遍历整个字符串找所有匹配项;
- 多余的分组:这个正则会把
{{和}}单独作为分组返回,导致结果数组里混入不必要的拆分内容,而非完整的{{xxx}}子串。
正确解决方案
我们需要调整正则,直接匹配所有{{开头、}}结尾的完整子串,同时用非贪婪匹配避免跨子串合并。
JavaScript 示例
const inputStr = "{{number}}-{{$index}}"; // 全局匹配所有{{...}}格式的子串,非贪婪模式确保不跨匹配 const resultArray = inputStr.match(/{{.*?}}/g); console.log(resultArray); // 输出: ["{{number}}", "{{$index}}"]
Python 示例
import re input_str = "{{number}}-{{$index}}" # 使用findall全局查找所有符合规则的子串 result_array = re.findall(r'{{.*?}}', input_str) print(result_array) # 输出: ['{{number}}', '{{$index}}']
补充说明
如果你的场景中{{和}}之间可能包含换行符,可以添加单行模式适配:
- JavaScript:
/{{.*?}}/gs(s修饰符让.匹配换行) - Python:
re.findall(r'{{.*?}}', input_str, re.DOTALL)
内容的提问来源于stack exchange,提问作者user7436753
相关产品推荐
相关产品推荐

