我有它包含一些代碼的字符串。我想對其進行一些更改。有一個for循環我想用js修改。 循環:修改字符串中的for循環
"for i in 0..10 loop"
我希望它是:
"for (var i=0; i<10; i++)"
這聽起來我非常複雜。什麼應該是最簡單的方法?
我有它包含一些代碼的字符串。我想對其進行一些更改。有一個for循環我想用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 + "++)";
}
它並不完美,比如你可以進一步檢查變量名是合法的,即開始用英文字母,不是保留字等
非常感謝您的幫助。 – Rckt 2011-12-29 08:16:04
您可以使用正則表達式匹配拔出你感興趣的部分。
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);
}
您可以嘗試匹配此正則表達式^for (.+) in (\d+)\.\.(\d+) loop$
並替換爲for (var \1=\2; \1 < \3; \1++)
。
這個for循環是否應該執行?它爲什麼在一個字符串中? – Purag 2011-12-29 08:00:28
不是很複雜,假設模式是固定的** ** ** [開始索引] **中的** [變量名稱**] ** ** [結束索引] **循環** - 粗體是固定的話。如果是這種情況,只需按空間分割,然後拿走所需的東西。 – 2011-12-29 08:00:48
不執行它。我試圖將代碼轉換爲js。 – Rckt 2011-12-29 08:01:12