<%
Function PunchWord(astring,sokord)
Set objRegExp = New RegExp
objRegExp.Global = True
objRegExp.IgnoreCase = true
objRegExp.Pattern = "" & Replace(sokord,".","\.")
Set matchesa = objRegExp.Execute(astring)
For Each matcha In matchesa
astring = Replace(astring,matcha,"<b>" & matcha & "</b>")
Next
Set matches = Nothing
Set objRegExp = Nothing
PunchWord = astring
End Function
%>
<%=PunchWord("min text här sa det sa","text")%>
Function MarkSearchWord(ByVal sDatabaseString, _
ByVal sSearchWord)
Dim objRegExp
Set objRegExp = New RegExp
objRegExp.Global = True
objRegExp.IgnoreCase = True
objRegExp.Pattern = "(" & sSearchWord & ")"
MarkSearchWord = objRegExp.Replace(sDatabaseString, "<b>$1</b>")
Set objRegExp = Nothing
End Function
Även i VB:
Public Function MarkSearchWord(ByVal sDatabaseString As String, _
ByVal sSearchWord As String, _
Optional ByVal sPreffix As String = "<b>", _
Optional ByVal sSuffix As String = "</b>") As String
Dim objRegExp As RegExp
Set objRegExp = New RegExp
objRegExp.Global = True
objRegExp.IgnoreCase = True
objRegExp.Pattern = "(" & sSearchWord & ")"
MarkSearchWord = objRegExp.Replace(sDatabaseString, sPreffix & "$1" & sSuffix)
Set objRegExp = Nothing
End Function
ByVal kopierar variabeln ned i funktionen, ByRef skickar bara en reference till vart i minnet en funktion/sub kan hitta variabeln.
Vet inte om det är detta du är ute efter, men här kommer en klass:
clsMarkWord.asp
============
<%
Class MarkWord
Private m_intWordCount ' As Integer
Public Property Let WordCount(ByVal iWordCount) ' As Integer
m_intWordCount = iWordCount
End Property
Public Property Get WordCount
WordCount = m_intWordCount
End Property
Public Function MarkSearchedWords(ByVal sContent, ByVal sSearchedWord) ' As String
DIm objRegExp
Dim Matches
Dim Match
Set objRegExp = New RegExp
objRegExp.Global = True
objRegExp.IgnoreCase = true
objRegExp.Pattern = "" & Replace(sSearchedWord,".","\.")
Set Matches = objRegExp.Execute(sContent)
'## -- how many matches have we found --
WordCount = Matches.Count
'## -- mark every match with bold --
For Each Match In Matches
sContent = Replace(sContent,Match,"<b>" & Match & "</b>")
Next
Set matches = Nothing
Set objRegExp = Nothing
MarkSearchedWords = sContent
End Function
End Class
%>
Funkar så här:
test.asp
======
<%
strContent = "Detta är en bra text att söka i. Om vi är bra, så här vi kanonbra, eller är vi bara bra?"
Set objMW = New MarkWord
strOutPut = objMW.MarkSearchedWords(strContent,"vi")
Response.Write "Antal träffar: " & objMW.WordCount & "<HR noshade size=""1"">" & _
strOutPut
Set objMW = Nothing
%>
<!--#INCLUDE VIRTAL="/classes/clsMarkWord.asp"-->
härligger klass-filen i en katalog, classes, och länkas in med SSI, som "vanligt"
Om du använder dig av det första exemplet kan du tex göra så här:
<%
dim rakna
Function PunchWord(astring,sokord)
rakna = 0
Set objRegExp = New RegExp
objRegExp.Global = True
objRegExp.IgnoreCase = true
objRegExp.Pattern = "" & Replace(sokord,".","\.")
Set matchesa = objRegExp.Execute(astring)
For Each matcha In matchesa
astring = Replace(astring,matcha,"<b>" & matcha & "</b>")
rakna = rakna + 1
Next
Set matchesa = Nothing
Set objRegExp = Nothing
PunchWord = astring
End Function
%>
<BR>Version 1: <%=PunchWord("min text här sa det sa","sa")%>
<BR>Antal träffar: <%=rakna%>
Fast, molnas kod gör exakt det min klass gör ...... enda skillnaden är att du lättare kan lägga till funktionalitet i klassen, mer skalbarhet och du slipper globala variabler som förr eller senare fixar en bugg