使用2个空格进行缩进,永远也不要使用混合的tab和空格作为缩进。
换行
使用Unix风格的换行,每行结尾以(\n)结束,永远不要使用Windows的换行符(\r\n)。
无拖尾空白
永远也不要在一行后面留空格,在提交之前,你要像每顿饭刷牙一样清理你的JS文件。否则,腐烂的气味会驱走贡献者或同事。
使用分号
根据科学研究,分号的使用是我们社会的核心价值。考虑一下反对派的观点 ,但是我们需要传统,不要滥用纠错机制(省略分号)。
注* 在JavaScript中前置逗号代码风格和省略分号一直存在争论,下同。
格式化工具很多,如果只单纯想格式化一下,可以用工具
不过看楼主的意思是想自己通过C#实现格式化功能,我想了个笨办法,效率可能不是太高,仅供参考,大概思路是:
1、先将{、}、替换为{\r、}\r、\r,以实现换行
2、再根据{、}的位置插入相应空格实现缩进
写了个Demo,以4个字符长度为缩进距离,楼主可以试试,换行缩进基本满足,有些细节可能还需调整
/// <summary>/// 格式化js代码
/// </summary>
/// <param name="js">原js代码</param>
/// <returns>格式化后的js代码</returns>
private string formatJavaScript(string js)
{
string jsStr = js.Replace("{", "{\r").Replace("}", "}\r").Replace("", "\r")
int indentIndex = 0
for (int i = 0 i < jsStr.Length i++)
{
if (jsStr[i] == '\r' && jsStr[i - 1] == '{')
{
indentIndex++
jsStr = jsStr.Insert(i + 1, getSpace(indentIndex))
i = i + 4 * indentIndex + 1
}
else if (jsStr[i] == '\r' && jsStr[i - 1] == '}')
{
indentIndex--
jsStr = jsStr.Remove(i - 5, 4)
i = i - 4
}
if (jsStr[i] == '\r')
{
jsStr = jsStr.Insert(i + 1, getSpace(indentIndex))
i = i + 4 * indentIndex + 1
}
}
return jsStr
}
/// <summary>
/// 获得一定字符长度的空格字符串
/// </summary>
/// <param name="index">JS代码大括号层级</param>
/// <returns>空格字符串</returns>
private string getSpace(int index)
{
string str = string.Empty
for (int i = 0 i < index i++)
{
str += " "
}
return str
}
//调用
string jsMin = "function test(){var text=1var text=2if(true){var text=3var text=4if(true){var text=5var text=6}}else{var text=7}}"
string jsNew = formatJavaScript(jsMin)