如何优化特定格式字符串转JS值的代码?技术需求咨询
字符串到JS表达式的转换方案
嘿,我刚好有处理这类模板解析的经验,给你理清楚这套字符串到JS表达式的转换规则,分基础和组合两种场景来看:
一、基础转换规则
1. 随机整数模板
- 匹配格式:
r[min,max]r(min和max为整数,且max ≥ min) - 转换逻辑:生成**min到max(包含两端)**的随机整数,对应JS表达式:
(Math.floor(Math.random() * (max - min + 1)) + min) - 实际示例:
r[10,55]r→(Math.floor(Math.random() * (55 - 10 + 1)) + 10)
2. 画布百分比模板
- 匹配格式:
%[percent;dimension]%(percent为数字,dimension取值w代表宽度、h代表高度) - 转换逻辑:计算画布对应维度的百分比值,对应JS表达式:
- 当
dimension为w时:(canvas.width / 100 * percent) - 当
dimension为h时:(canvas.height / 100 * percent)
- 当
- 实际示例:
%[50;w]%→(canvas.width / 100 * 50)
二、组合转换规则(嵌套场景)
两种模板可以互相嵌套,处理顺序是先解析内层模板,再替换到外层模板中:
- 示例:
%[r[0,50]r;h]%- 先处理内层的随机模板:
r[0,50]r→(Math.floor(Math.random() * (50 - 0 + 1)) + 0) - 将结果替换到外层百分比模板,最终得到:
(canvas.height / 100 * (Math.floor(Math.random() * (50 - 0 + 1)) + 0))
- 先处理内层的随机模板:
如果要实现这个转换逻辑,你可以用正则表达式来匹配不同的模板格式,优先匹配嵌套的内层模板(比如先找r[.*]r的内容),替换后再处理外层的%[.*]%模板,循环直到没有可匹配的模板为止。
内容的提问来源于stack exchange,提问作者Paper
相关产品推荐
相关产品推荐

