2014-04-12 36 views
-4

恢復句話我有這個如何在JavaScript

var input = "([lazy({(jumps{fox([quick(The)]brown)})over}the)]dog)"; 

我想

敏捷的棕色狐狸跳過懶狗。

任何想法?我試圖使用RegEx但找不到。

+0

它是特定於這種情況還是字符串可以是任何長度不等的東西? – sshashank124

+2

*當然*你不能使用正則表達式,你將需要解析它。它使用的分組符號是什麼? –

+2

聽起來像數據結構作業。 [提示:二進制表達式樹](http://en.wikipedia.org/wiki/Binary_expression_tree)和[stacks](http://en.wikipedia.org/wiki/Stack_(abstract_data_type))。 – Joseph

回答

1

我們需要在這裏使用堆棧類型的方法。請參閱下面的實現。

var res = "([lazy({(jumps{fox([quick(The)]brown)})over}the)]dog)".split(""); 
var txt = [],lvl=-1; 
res.forEach(function(e,i){ 
if(e=='('||e=='{'||e=='['){ 
    lvl++; 
} else if(e==')'||e=='}'||e==']'){ 
    lvl--; 
} else { 
    if(typeof txt[lvl]=='undefined'){ 
    txt[lvl] = e; 
    } else { 
    txt[lvl] = txt[lvl] + e; 
    } 
} 
}); 
txt = txt.reverse().join(" "); 
console.log(txt); 
if(lvl!=-1) { 
    //this will alert if any missing parenthesis 
    alert("Pattern error in input"); 
} 

編輯:根據問題所有者對輸入模式的描述進行更新。

+1

任務的整個想法是解析命令... – Teemu

+0

@Teemu JS無法理解單詞的含義。因此,除非輸入中有模式,否則無法完成。 –

+2

剛剛刪除的括號在這裏定義瞭解析順序,而不是單詞。 – Teemu