如何编写正则表达式提取双花括号内的变量与函数参数?
提取双花括号内目标内容的正则表达式解决方案
需求明确
- 提取双花括号内仅有的单个字母数字/下划线组成的变量名(如
{{ name }}中的name) - 若括号内是函数调用格式(函数名+空格分隔的参数),忽略第一个函数名,提取后续所有参数(如
{{ concat first_name last_name }}中的first_name、last_name) - 支持提取多个参数,需全部匹配
最终正则表达式
使用以下正则并开启全局匹配模式(g flag):
(?<=\{\{(?:\s*\w+\s+)*)\b\w+\b(?=\s*\}\})
正则解析
(?<=\{\{(?:\s*\w+\s+)*):正向回顾后发断言,确保匹配位置在{{之后,同时跳过可能存在的第一个函数名(允许函数名前后有空格)\b\w+\b:匹配完整的单词(由字母、数字、下划线组成,\b确保不会匹配单词的一部分)(?=\s*\}\}):正向先行断言,确保匹配的单词在双花括号闭合标记}}之前(允许单词和}}之间有空格)
测试验证
示例1
输入文本:
Hi {{ name }}, your full name is {{ concat first_name last_name }}
匹配结果:["name", "first_name", "last_name"]
示例2
输入文本:
"Key": "price_change_manager.msg2 {{ message }}"
"value": "{{ username }} plan to {{formatCurrence new_price currency old_price }}"
匹配结果:["message", "username", "new_price", "currency", "old_price"]
原正则问题说明
你之前使用的\{\s*\{\s*([^\}\/\s]+)\s*\}\s*\}仅能匹配单个无空格的单词,因为它通过[^\}\/\s]+限制了匹配内容不能包含空格,因此无法处理多参数的函数调用场景。
内容的提问来源于stack exchange,提问作者Eleandro Duzentos
相关产品推荐
相关产品推荐

