如何在Ruby中使用regex匹配含特殊字符的任意层级重复模式
Ruby 多场景变量匹配正则解决方案
你原有正则的局限为强制要求必须存在1个点且仅支持两段式点分隔结构,无法适配无点和任意多点的场景,修改后的实现代码如下:
arr = value.scan(/\{\{(\w+(?:\.\w+)*)\}\}/).flatten
兼容场景验证
上述正则可同时覆盖你提到的所有需求:
- 无点分隔场景:匹配
{{width}},提取结果为width - 任意层级点分隔场景:匹配
{{shape.rectangle.coords.width}},提取结果为完整的shape.rectangle.coords.width - 原有两段式场景:依然兼容
{{coords.width}}的匹配,提取结果无变化
正则逻辑说明
\{\{/\}\}:匹配前后的双大括号边界\w+:匹配开头的变量名片段,符合常见的变量命名规则(支持字母、数字、下划线)(?:\.\w+)*:非捕获分组,*代表可匹配0次或多次:- 匹配0次时,对应无点分隔的单变量场景
- 匹配N次时,对应N个点分隔的多层变量场景
- 外层的
()是捕获分组,scan方法会自动提取该分组的内容作为结果
如果你的场景中可能存在双大括号和变量之间的空格(比如{{ coords.width }}),可以使用兼容空格的版本:
arr = value.scan(/\{\{\s*(\w+(?:\.\w+)*)\s*\}\}/).flatten
内容的提问来源于stack exchange,提问作者Divyansh Mishra
相关产品推荐
相关产品推荐

