2014-11-22 55 views
0

我的JavaScript的一大塊,有許多comma operators,例如逗號操作符把分號

"i".toString(), "e".toString(), "a".toString(); 

是否有使用JavaScript的方式來將這些轉換到分號?

"i".toString(); "e".toString(); "a".toString(); 
+0

爲什麼要轉換「」以‘;’?你知道正則表達式嗎? – Aravind 2014-11-22 04:03:55

+0

是的,但並不像用分號替換所有逗號那麼簡單。基於模式的匹配無法區分參數和實際逗號運算符之間的逗號差異。我想將其轉換爲可讀性(其中很大一部分是非常難讀的) – 2014-11-22 04:06:52

+0

當遇到以'function'開頭並以'{'結尾的字符串時,您可以「跳過」文本。 – Aravind 2014-11-22 04:09:57

回答

1

這可能看起來像一個陰謀詭計的答案......但我建議不要嘗試它。做任何類型的字符串操作來改變它實際上是不可能的。除了函數定義參數列表之外,還需要跳過字符串文本或正則表達式文本或函數調用或數組文字或對象文字或變量聲明中的文本....可能更多。正如你看到關鍵字無法處理它,正則表達式無法處理它,打開和關閉。

如果你想實際轉換這些,你實際上必須解析代碼並找出哪些是逗號運算符。此外,可能有某些情況下,逗號的存在是相關的:

var a = 10, 20; 

是不一樣的

var a = 10; 20; 

例如。

所以我真的不認爲你應該嘗試它。但是,如果你確實需要,我會開始尋找一個JavaScript解析器(或者寫一個,它不是非常難,但它可能需要一天的更好的一部分,可能仍然是越野車)。我敢肯定像Google這樣的更高級的縮小器包含了一個解析器,也許他們的源代碼會有所幫助。

然後,您解析它以查找實際的逗號表達式。如果使用返回值,請保持獨立。如果不是,請繼續並用表達式語句替換它們,然後重新生成源代碼字符串。您也可以在此時根據範圍縮進進行格式化。它可能最終看起來很不錯。這只是一小部分工作。

這裏是寫在JS解析器庫:http://esprima.org/(感謝@torazaburo這個評論)

+0

不,編寫一個解析器將需要比一天多得多的時間。你應該能夠用esprima相對輕鬆地做到這一點。 – 2014-11-22 04:46:16