2011-12-29 167 views
0

我有它包含一些代碼的字符串。我想對其進行一些更改。有一個for循環我想用js修改。 循環:修改字符串中的for循環

"for i in 0..10 loop" 

我希望它是:

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

這聽起來我非常複雜。什麼應該是最簡單的方法?

+1

這個for循環是否應該執行?它爲什麼在一個字符串中? – Purag 2011-12-29 08:00:28

+0

不是很複雜,假設模式是固定的** ** ** [開始索引] **中的** [變量名稱**] ** ** [結束索引] **循環** - 粗體是固定的話。如果是這種情況,只需按空間分割,然後拿走所需的東西。 – 2011-12-29 08:00:48

+0

不執行它。我試圖將代碼轉換爲js。 – Rckt 2011-12-29 08:01:12

回答

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

+0

奇妙的方法。謝謝。 – Rckt 2011-12-29 08:20:52

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

它並不完美,比如你可以進一步檢查變量名是合法的,即開始用英文字母,不是保留字等

+0

非常感謝您的幫助。 – Rckt 2011-12-29 08:16:04

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); 
}