如何检测URL中的Mustache占位符及其位置?
解决方案
Mustache本身没有提供专门的API来检测字符串中的占位符,最直接高效的方式是用正则表达式匹配Mustache的变量格式({{ 变量名 }},允许变量名前后有空格)。
正则匹配方案
使用以下正则表达式可以匹配绝大多数普通Mustache变量占位符:
/{{\s*([a-zA-Z0-9_]+)\s*}}/g
{{:匹配占位符的起始标记\s*:兼容变量名前后带0个或多个空格的写法([a-zA-Z0-9_]+):捕获合法的Mustache变量名(仅支持字母、数字、下划线)}}:匹配占位符的结束标记g:全局模式,找出字符串中所有符合的占位符
示例代码(JavaScript)
以下代码可以检测URL中的占位符,并返回每个占位符的名称、起始位置、结束位置:
const targetUrl = '//workflow/v99/history/{{ espisodeId }}'; const mustacheRegex = /{{\s*([a-zA-Z0-9_]+)\s*}}/g; let matchResult; const detectedPlaceholders = []; // 遍历所有匹配项 while ((matchResult = mustacheRegex.exec(targetUrl)) !== null) { detectedPlaceholders.push({ variableName: matchResult[1], startPosition: matchResult.index, endPosition: matchResult.index + matchResult[0].length, fullPlaceholder: matchResult[0] }); } console.log(detectedPlaceholders); // 输出结果: // [ // { // variableName: 'espisodeId', // startPosition: 29, // endPosition: 45, // fullPlaceholder: '{{ espisodeId }}' // } // ]
额外说明
- 此方法无需依赖Mustache库,直接通过字符串匹配完成检测,性能更优。
- 如果你已经将URL按
/分割为路径片段,可以对每个片段单独执行正则匹配,快速定位到包含占位符的具体路径段。 - 若需要兼容Mustache的section标签、注释等复杂语法,可以扩展正则规则,但普通变量场景下上述正则已足够覆盖需求。
内容的提问来源于stack exchange,提问作者André Castro
相关产品推荐
相关产品推荐

