• 代码格式化[转]


     
    使用js正则表达式格式化加亮C#源代码
        很经常,我们可以看到在网页上看到各式各样的代码,比如下面这段CSharp Source Code,通常他们可能是这样的:
    	private DataSet _dsContacts;
                private string _sSort;
                private void Page_Load(object sender, System.EventArgs e)
                {
                //code here
                }
                
    但是,如果他们是这样来显示,我想看起来应该更舒服吧
    	private DataSet _dsContacts;
                private string _sSort;
                private void Page_Load(object sender, System.EventArgs e)
                {
                	  //code here
                	}
                
    一些站点上也有对某种语言的关键字进行加亮显示,比如CodeProject或者dotnetjunkies等,不过他们都是定义了特定的css样式,然后逐一进行样式应用来进行加亮显示,如果这种技术没有后台支持的话,将会有产生相当大的工作量,利用Javascript强大的正则表达式功能,我们可以在没有后台支持的情况下以少量的工作来完成这个功能,String.Replace()将会为我们完成所有核心工作
       //替换关键字
                for (thiskey in CsharpKeyword)
                {
                reg = new RegExp("\\b("+CsharpKeyword[thiskey].toString()+"){1}\\b","g");
                text = text.replace(reg,"<font color=blue>$1</font>");
                }
                //替换"..."字符串中可能被加亮的关键字
                text = text.replace(/\"([^\"]*)\"/g,function($1){return $1.replace(/<\/?font.*?>/gi,"")});
                //.号表示除换行符或其他Unicode中止符之外的所有字符(替换单行注释符)
                text = text.replace(/(\/\/.*)/g,function($1){return "<font color=green>"+$1.replace(/<\/?font.*?>/gi,"")+"</font>"});
                text = text.replace(/(\/\*[\S\s]*\*\/)/g,function($1){return "<font color=green>"+$1.replace(/<\/?font.*?>/gi, "")+"</font>"});//替换多行注释符
                
    基本上,这里替换加亮特殊代码需要按照这样的步骤:替换关键字->替换字符串("")中的关键字(第一个步骤可能将某些字符串中的关键字加亮了,这个步骤需要把它们转回去)->替换//单行注释->替换/**/多行注释,每一个替换都要先擦掉原来的<font>标记,才能解决嵌套的情况,否则有可能//a<font color=red>b</font>c最终显示的是//abc而不是期望中的//a<font color=red>b</font>c;这是最关键的地方.
    需要注意的是,String.Replace(regex,replacement)方法;如果replacement是一个函数的话,必须要Javascript1.2或者Jscript5.5(IE5.5)以上才能实现
    BTW:感谢BLUEIDEA的JS斑竹小狗提供了每次替换重新擦除前一次替换的<font>标签的思路
    完整的源代码可以从下面的连接下载,已经简单的封装成HTC,方便调用
    You can view the demos from here
    FormatCsharpCode.htc
     copyright 2003 by MMKK
     
  • 相关阅读:
    JavaWeb
    Network
    JavaWeb
    Maven
    IDEA
    Maven
    Network
    JavaWeb
    JavaWeb
    JavaWeb
  • 原文地址:https://www.cnblogs.com/twh/p/1004789.html
Copyright © 2020-2023  润新知