逗号操作符把分号

问题描述:

我的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

这可能看起来像一个阴谋诡计的答案......但我建议不要尝试它。做任何类型的字符串操作来改变它实际上是不可能的。除了函数定义参数列表之外,还需要跳过字符串文本或正则表达式文本或函数调用或数组文字或对象文字或变量声明中的文本....可能更多。正如你看到关键字无法处理它,正则表达式无法处理它,打开和关闭。

如果你想实际转换这些,你实际上必须解析代码并找出哪些是逗号运算符。此外,可能有某些情况下,逗号的存在是相关的:

var a = 10, 20; 

是不一样的

var a = 10; 20; 

例如。

所以我真的不认为你应该尝试它。但是,如果你确实需要,我会开始寻找一个JavaScript解析器(或者写一个,它不是非常难,但它可能需要一天的更好的一部分,可能仍然是越野车)。我敢肯定像Google这样的更高级的缩小器包含了一个解析器,也许他们的源代码会有所帮助。

然后,您解析它以查找实际的逗号表达式。如果使用返回值,请保持独立。如果不是,请继续并用表达式语句替换它们,然后重新生成源代码字符串。您也可以在此时根据范围缩进进行格式化。它可能最终看起来很不错。这只是一小部分工作。

这里是写在JS解析器库:http://esprima.org/(感谢@torazaburo这个评论)

+0

不,编写一个解析器将需要比一天多得多的时间。你应该能够用esprima相对轻松地做到这一点。 – 2014-11-22 04:46:16