这类程序在网上很多,但拿来练练“正则表达式”也不错的,所以就随手写了这个,现在只能对代码(函数,关键字,对象,字符串)进行着色,下一步想对函数块加入折叠效果(.NET代码编辑器的效果)。
演示效果代码:(ChangeVBToColor函数即是重点函数)
---------------------------------------------------------------------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<style type="text/css">
<!--
body {
font-family: "宋体";
font-size: 12px;
color: #333333;
}
.Text {
font-family: "宋体";
font-size: 12px;
border: 1px solid #333333;
}
td {
font-family: "宋体";
font-size: 12px;
}
-->
</style>
</head>
<body>
<table width="760" height="399" border="0" cellpadding="0" cellspacing="2">
<tr>
<td height="302" valign="top"><form name="form1" method="post" action="">
<div align="center">
<textarea name="Content" cols="120" rows="25" class="Text" id="Content"></textarea>
<br>
<input name="btnShow" type="button" class="Text" id="btnShow" value="显 示" OnClick="GetHtmlContent()">
</div>
</form></td>
</tr>
<tr>
<td height="91"><span id="sHtml"></span></td>
</tr>
</table>
<SCRIPT LANGUAGE="VBScript">
Sub GetHtmlContent
'GGG form1.Content.value
document.all.sHtml.innerHTML=ChangeVbToColor(HtmlEncode(form1.Content.value))
End Sub
Function ChangeVbToColor(ByVal sText)
Dim re,Matches,i
Dim oneReg
Set re=new RegExp
re.IgnoreCase =true
re.Global=true
'转换函数块
're.Pattern="Function (/w+)(/([^/)]*/))?([^End Function]*)End Function"
'sText=re.Replace(sText,"<font color=red>$1</font>")
'sText=re.Replace(sText,"<img src=http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif>$3")
'alert sText
'转换保留字为[蓝色]
re.Pattern="(/bAnd/b|/bByRef/b|/bByVal/b|/bCall/b|/bCase/b|/bClass/b|/bConst/b|/bDim/b|/bDo/b|/bEach/b|/bElse/b|/bElseIf/b|/bEmpty/b|/bEnd/b|/bEqv/b|/bErase/b|/bError/b|/bExit/b|/bExplicit/b|/bFalse/b|/bFor/b|/bFunction/b|/bGet/b|/bIf/b|/bImp/b|/bIn/b|/bIs/b|/bLet/b|/bLoop/b|/bMod/b|/bNext/b|/bNot/b|/bNothing/b|/bNull/b|/bOn/b|/bOption/b|/bOr/b|/bPrivate/b|/bProperty/b|/bPublic/b|/bRandomize/b|/bReDim/b|/bRem/b|/bResume/b|/bSelect/b|/bSet/b|/bStep/b|/bSub/b|/bThen/b|/bTo/b|/bTrue/b|/bUntil/b|/bWend/b|/bWhile/b|/bXor/b)"
sText=re.Replace(sText,"<font color=blue>$1</font>")
'转换函数和对象为[红色]
re.Pattern="(/bAnchor/b|/bArray/b|/bAsc/b|/bAtn/b|/bCBool/b|/bCByte/b|/bCCur/b|/bCDate/b|/bCDbl/b|/bChr/b|/bCInt/b|/bCLng/b|/bCos/b|/bCreateObject/b|/bCSng/b|/bCStr/b|/bDate/b|/bDateAdd/b|/bDateDiff/b|/bDatePart/b|/bDateSerial/b|/bDateValue/b|/bDay/b|/bDictionary/b|/bDocument/b|/bElement/b|/bErr/b|/bExp/b|/bFileSystemObject /b|/bFilter/b|/bFix/b|/bInt/b|/bForm/b|/bFormatCurrency/b|/bFormatDateTime/b|/bFormatNumber/b|/bFormatPercent/b|/bGetObject/b|/bHex/b|/bHistory/b|/bHour/b|/bInputBox/b|/bInStr/b|/bInstrRev/b|/bIsArray/b|/bIsDate/b|/bIsEmpty/b|/bIsNull/b|/bIsNumeric/b|/bIsObject/b|/bJoin/b|/bLBound/b|/bLCase/b|/bLeft/b|/bLen/b|/bLink/b|/bLoadPicture/b|/bLocation/b|/bLog/b|/bLTrim/b|/bRTrim/b|/bTrim/b|/bMid/b|/bMinute/b|/bMonth/b|/bMonthName/b|/bMsgBox/b|/bNavigator/b|/bNow/b|/bOct/b|/bReplace/b|/bRight/b|/bRnd/b|/bRound/b|/bScriptEngine/b|/bScriptEngineBuildVersion/b|/bScriptEngineMajorVersion/b|/bScriptEngineMinorVersion/b|/bSecond/b|/bSgn/b|/bSin/b|/bSpace/b|/bSplit/b|/bSqr/b|/bStrComp/b|/bString/b|/bStrReverse/b|/bTan/b|/bTime/b|/bTextStream/b|/bTimeSerial/b|/bTimeValue/b|/bTypeName/b|/bUBound/b|/bUCase/b|/bVarType/b|/bWeekday/b|/bWeekDayName/b|/bWindow/b|/bYear/b)"
sText=re.Replace(sText,"<font color=red>$1</font>")
'转换字符串为[紫色]
re.Pattern="(""[^""]*"")"
sText=re.Replace(sText,"<font color=#FF33FF>$1</font>")
sText = Replace(sText, CHR(34), """)
sText = Replace(sText, CHR(39), "'")
ChangeVbToColor=sText
End Function
Function HTMLEncode(fString)
If Not isnull(fString) Then
fString = replace(fString, "&", "&")
fString = replace(fString, ">", ">")
fString = replace(fString, "<", "<")
fString = replace(fString, CHR(32), " ")
fString = replace(fString, CHR(9), " ")
fString = Replace(fString, CHR(13), "")
fString = Replace(fString, CHR(10) & CHR(10), "</P><P> ")
fString = Replace(fString, CHR(10), "<BR> ")
HTMLEncode = fString
Else
HTMLEncode=""
End If
End Function
Function GGG(ByVal sText)
dim re,name,strTemplate,Matches,i
Dim oneReg
set re=new RegExp
re.IgnoreCase =true
re.Global=true
're.Pattern= "<(.*)>.*<///1>"
re.Pattern="Function (/w+)(/([^/)]*/))?(.[^(End Function)]*)End Function"
Set Matches=re.Execute(sText)
alert sText
alert Matches.Count
For i =0 to Matches.Count-1
alert Matches(i).SubMatches(0)&"<br>"
Next
End Function
</SCRIPT>
</body>
</html>