将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声明。
在多重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