这是我在 SuperUser 上发表的第一篇帖子,我不知道我是否在正确的位置。
我用 JavaScript 编写了一个游戏。在整个游戏中,我以以下方式使用 FOR 循环来完成各种任务。
for([variable] = [value]; [variable] < [array].length; [variable]++)
但是,出于优化目的,我想将这种方式的每一个 FOR 循环都更改为略有不同的格式
let len = [array].length
for([variable] = [value]; [variable] < [array].length; [variable]++)
本质上,这是一种高级的查找和替换。我有什么办法可以创建某种脚本来执行此操作吗?
编辑:我已经研究过使用 RegEx,但我的问题是所有变量都可以是任意长度。
答案1
以下 RegEx 将匹配所有行并提取变量名称、值和数组名称:
for *\( *([\w$]+) *= *([^;]+); *[\w$]+ *< *([\w$]+).length *; *[\w$]+\+\+ *\)
如果您的 RegEx 解析器支持反向引用(JavaScript 的解析器支持),则可以通过将下一个变量模式替换为对第一个变量出现的反向引用来缩短和强化模式。这保证了只有当变量名称在所有出现时都相同时语句才会匹配:
for *\( *([\w$]+) *= *([^;]+); *\1 *< *([\w$]+).length *; *\1\+\+ *\)
提取的值:
- 第一组:变量名称
- 第二组:价值
- 第三组:数组名称
根据这些值,可以轻松地以目标形式重写匹配的行。
备注:为了完全符合 JavaScript 规范并允许在“for”语句中使用空格、制表符和换行符,所有*
出现的字符都应用 替换\s*
。