修改字符串中的for循环

Modifying a for loop in a string

本文关键字:for 循环 字符串 修改      更新时间:2023-09-26

我有一个字符串,它包含一些代码。我想对它做些改动。我想用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++)