AsaMedlem sedan dec. 20011 860 inlägg Hur får man det ordet som man ex skriver i en söktjänst att bli fetstilt utan att bli exakt som man skrev i sökordet.
Har nu en grej som Replacar alla ord men då blir du ex om man skriver ett sökord med små bokstäver så byts alla ut till små. Inge bra :/
Hur ska man göra?
Jesper TMedlem sedan nov. 20017 144 inlägg regexp skulle jag tippa på
Jesper TMedlem sedan nov. 20017 144 inlägg <%
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")%>
AsaMedlem sedan dec. 20011 860 inlägg Ska testa på en gång :) Funkade perfekt! Supertack till dig!
AsaMedlem sedan dec. 20011 860 inlägg Nu vill jag även att det ska stå hur många gånger ordet fanns med i sökresultatet. Hur gör jag då?
icaaqMedlem sedan okt. 20005 273 inlägg Jag vet inte hur du skall få det att funka med denna funktion men du skall använda
[red]matchesa.count[/red]
Mer info om RegExp på webeye.nu ;)
mvh icaaq
AsaMedlem sedan dec. 20011 860 inlägg Okej! Jag kollar lite där å ser om jag får till det. Tackar!
En kortare funktion:
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
AsaMedlem sedan dec. 20011 860 inlägg Vad gör ByVal ?
Har du nåt bra för att räkna antal träffar? Har läst på Webeye men förstår inte riktigt hur jag ska göra!
PatrikBMedlem sedan mars 20002 836 inlägg 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"
Mer funktionalitet kan byggas i klassen vid behov
cya,
PatrikB
MolnaMedlem sedan jan. 2001188 inlägg 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 det finns säkert något tjusigare sätt:)
AsaMedlem sedan dec. 20011 860 inlägg Ska se om det var det jag var ute efter :) Återkommer!
AsaMedlem sedan dec. 20011 860 inlägg Tackar Molna. Det funka fint!
PatrikBMedlem sedan mars 20002 836 inlägg 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
cya,
PatrikB
AsaMedlem sedan dec. 20011 860 inlägg Hmm, okej! Men det behövs nog inge mer än bara det att göra fetstil och räkna träffar!
Men jag kommer dock testa din kod Partik.