| 使用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 |
浙公网安备 33010602011771号