修改字符串中的for循环

时间:2011-12-29 07:57:59

标签: javascript

我有字符串它包含一些代码。我想对它做一些改变。我想用js修改一个for循环。 循环:

"for i in 0..10 loop"

我希望它是:

"for (var i=0; i<10; i++)"

这听起来很复杂。什么应该是最简单的方法?

4 个答案:

答案 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 + "++)";
}

Live test case

这并不完美,例如你可以进一步检查变量名是否合法,即以英文字母开头,而不是保留字等。

答案 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);

Example

答案 3 :(得分:0)

您可以尝试匹配此正则表达式^for (.+) in (\d+)\.\.(\d+) loop$,并替换为for (var \1=\2; \1 < \3; \1++)

http://www.solmetra.com/scripts/regex/上试一试......