webForumDet fria alternativet

Markera med fetstil

14 svar · 553 visningar · startad av Asa

AsaMedlem sedan dec. 20011 860 inlägg
#1

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
#2

regexp skulle jag tippa på

Jesper TMedlem sedan nov. 20017 144 inlägg
#3
<%
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
#4

Ska testa på en gång :) Funkade perfekt! Supertack till dig!

AsaMedlem sedan dec. 20011 860 inlägg
#5

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
#6

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
#7

Okej! Jag kollar lite där å ser om jag får till det. Tackar!

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#8

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
#9

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
#10

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
#11

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
#12

Ska se om det var det jag var ute efter :) Återkommer!

AsaMedlem sedan dec. 20011 860 inlägg
#13

Tackar Molna. Det funka fint!

PatrikBMedlem sedan mars 20002 836 inlägg
#14

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
#15

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.

130 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)