我有字符串它包含一些代码。我想对它做一些改变。我想用js修改一个for循环。 循环:
"for i in 0..10 loop"
我希望它是:
"for (var i=0; i<10; i++)"
这听起来很复杂。什么应该是最简单的方法?
答案 0 :(得分:2)
基于我的评论,这里是简单的实现:
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 + "++)";
}
这并不完美,例如你可以进一步检查变量名是否合法,即以英文字母开头,而不是保留字等。
答案 1 :(得分:2)
您可以使用正则表达式匹配来提取您感兴趣的部分。
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);
}
答案 2 :(得分:1)
这是一种方法,但可能不是最好的:
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);
答案 3 :(得分:0)
您可以尝试匹配此正则表达式^for (.+) in (\d+)\.\.(\d+) loop$
,并替换为for (var \1=\2; \1 < \3; \1++)
。
在http://www.solmetra.com/scripts/regex/上试一试......