将JS逗号分隔的var声明分成多个var声明的脚本

我有一个很大的代码库,有很多东西声明如下:

var x = 1, y = { //some object }, z = function(arg) { // some function }; 

我想运行一个节点脚本来转换所有这一切

 var x = 1; var y = { //some object }; var z = function(arg) { // some function }; 

这并不像运行正则expression式那样简单,因为只要一个对象或函数出现,就不能再查找逗号和分号了。

有一个现有的库或工具可以为我做这个转换吗? 不希望缩小或丑化代码,我只是想修改现有的,人类可读的代码来摆脱逗号分隔的var声明。

       

网上收集的解决方案 "将JS逗号分隔的var声明分成多个var声明的脚本"

在多重variables声明之外是否存在字符序列,后跟一个identifier ,然后是单个= ? 我遇到了麻烦的思想与这些字符的string文字之外,因为单个=用于赋值,我不知道为什么你会有一个逗号之前的赋值语句,除了在初始化forms你'重新尝试更换。

当然,在parsing器更合适的情况下使用正则expression式总是有风险的。 该模式看起来像这样:

,\s*([\$a-z_][\$a-z_0-9]*)(?=\s*=[^=])

注意:Visual Studio插件Resharper对此操作进行重构。 但是,与许多其他重构不同的是,Resharper不提供全局应用的选项。

也许我错过了一些东西,但是如果你所有的逗号分隔符都在一行的最后,你可以使用正则expression式:

 replace(/,\n/g, ';\nvar '); 

这是一个浏览器的例子:

 // in node, this would come straight from a file var string = 'var x = 1,\ny = {\n //some object \n},\nz = function(arg) {\n // some function\n};'; // heres an element we can use for results var code = document.getElementById('code'); // lets show original string code.innerHTML = string; // lets show the new string in a couple of seconds setTimeout( function () { // the regex replace var updated = string.replace(/,\n/g, ';\nvar '); // updating the code element code.innerHTML = updated; // change color to signify finished code.className = 'done'; }, 2000); 
 code { white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word; } .done { background-color: #C0D9AF; } 
 <code id="code"></code> 

这似乎是诀窍:

jsfmt –rewrite“a = b,c = d – > var a = b; var c = d;” input.js> output.js

input.js:

 var x = 1, y = { //some object }, z = function(arg) { // some function }; 

output.js:

 var x = 1; var y = { //some object }; var z = function(arg) { // some function }; 

使用jsfmt