使用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 } //替换关键字 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 |