修改字符串中的for循环
Modifying a for loop in a string
我有一个字符串,它包含一些代码。我想对它做些改动。我想用js修改一个for循环。循环:
"for i in 0..10 loop"
我希望它是:
"for (var i=0; i<10; i++)"
听起来很复杂。最简单的方法是什么?
根据我的评论,这里是一个简单的实现:
var before = "for i in 0..10 loop";
var after = Translate(before);
function Translate(command) {
var tokens = command.split(" ");
if (tokens.length != 5)
return "ERROR: invalid command (wrong number of tokens)";
if (tokens[0] != "for" || tokens[2] != "in" || tokens[4] != "loop")
return "ERROR: invalid command (syntax error)";
var indices = tokens[3].split("..");
if (indices.length != 2)
return "ERROR: invalid command (invalid indices format)";
var startIndex = parseInt(indices[0], 10);
var endIndex = parseInt(indices[1], 10);
if (isNaN(startIndex) || isNaN(endIndex))
return "ERROR: invalid command (illegal indices)";
var varName = tokens[1];
return "for (var " + varName + "=" + startIndex + "; " + varName + "<" + endIndex + "; " + varName + "++)";
}
实时测试用例。
这并不完美,例如,你可以进一步检查变量名是否合法,即以英文字母开头,而不是保留词等
您可以使用正则表达式匹配来拉出您感兴趣的部分。
var string_to_match = 'for i in 0..10 loop',
re = /for ([A-z]*) in ('d*)'.'.('d*) loop/,
data = re.exec(string_to_match);
// data contains:
// ["for i in 0..10 loop", "i", "0", "10"]
for(i = data[2]; i < data[3]; i++) {
console.log(i);
}
这里有一种方法,但可能不是最好的:
var str = "for i in 0..10 loop",
str = str.replace("i in ", "(var i="),
str = str.replace("..", "; i<"),
str = str.replace(" loop", "; i++)");
console.log(str);
。
您可以尝试匹配此正则表达式^for (.+) in ('d+)'.'.('d+) loop$
并将其替换为for (var '1='2; '1 < '3; '1++)
。
相关文章:
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 我的javascript for循环不起作用
- For循环冻结Javascript
- 如何在for循环中添加事件侦听器
- 双“for”循环(循环)
- javascript for循环不起作用
- for循环中的javascript if语句找不到==
- Javascript在for循环中等待处理请求
- For循环在Jquery中只运行一次
- 如何在for循环中使用计数器
- for循环中的JavaScript闭包
- 为什么我们在ES2015中需要一个新的for循环结构,而我们已经有了for、forEach
- For循环在调用时未运行
- 如何使用for循环添加所有按钮'单击事件
- 如何更改在for循环中生成的圆的位置
- 为什么这个For循环会使浏览器实验室崩溃
- 为什么我使用javascript获得了一个无限的for循环
- 在for循环中使用多维数组设置google.maps.Marker图标
- 如何在angularJS中运行for循环而不使用html标记