Jag försöker att via regex markera mer än ett ord i min sökmotor. Är det bara ord inom citationstecken (") som skall hittas? Taget ifrån webeye.nu Jo, men varför har du med " i början och slutet av strängen? Skall bara ord som står inom citationstecken matchas? Jag fick för mig att det skulle vara så, kanske där felet är? Ditt pattern ser ju inte ut som det som står innan. Du gör ju så att det blir: Hej Niklas, jo du har rätt, men det hjälpte inte alls Skulle bara säga det att jag inte alls kan något om RegExp, påpekade bara det uppenbara jag såg. Tyvärr var det alltså inte det som var problemet. funkar det inte att bara göra nåt i stil med (fot|boll) och köra en global replace med <b>$0</b> ifall indexeringen börjar från noll?Problem med att fetmarkera mer än ett ord
<code>
Function boldText(myString,strReplace)
dim nWord,kW,strText
Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
if instr(strReplace," ") then'finns det mer än ett ord
nWord = split(strReplace," ")'splitta på mellanslag
kW =""(" 'denna funktionen lägger ihop sökorden t ex "(Access|databas|DSN)"
for i = 0 to ubound(nWord)
if i <> ubound(nWord) then
kW = kW & nWord(i) & "|"
elseif i = ubound(nWord) then
kW = kW & nWord(i) & ")""
end if
next
objRegExp.Pattern =kW
objRegExp.Pattern =kW
for i = 0 to ubound(nWord)
strText=strText & "<B>$" & i & "</B>"
next
boldText =objRegExp.Replace(myString,strText)'här skall den ersätta alla med fet text
boldText = replacestring
else
'det fanns bara ett sökord
objRegExp.Pattern = TRIM(strReplace)
replacestring = objRegExp.Replace(myString, "<B>" & strReplace & "</B>")
boldText = replacestring
end if
End Function
</code>
När jag kollar med response.write, så ser jag att mina variabler(lopparna) fungerar perfekt.
Skriver jag in ett ord, så fungerar det perfekt, men skriver jag t ex två ord, så händer ingenting.
Vad missar jag?
[REDIGERAT]
JAg har kommit en bit på vägen, men den markera bara ett ord.
<code>
nWord = split(strReplace," ")'splitta på mellanslag
kW =""(" 'denna funktionen lägger ihop sökorden t ex "(Access)|(databas)|(DSN)"
for i = 0 to ubound(nWord)
if i <> ubound(nWord) then
kW = kW & nWord(i) & ")|("
strText="<B>$" & i & "</B>"
elseif i = ubound(nWord) then
kW = kW & nWord(i) & ")""'avsluta sökorden
strText=strText & "<B>$" & i & "</B>"'detta blir <B>$1</B><B>$2</B><B>$3</B>
end if
next
objRegExp.Pattern = kW'blir alltså (hatten)|(fånga)|(en)
replacestring = objRegExp.Replace(myString,strText)
boldText = replacestring
</code>
Det verkar vara jobbigt det här...Sv: Problem med att fetmarkera mer än ett ord
Sv: Problem med att fetmarkera mer än ett ord
<code>
Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.Pattern = "(Access|databas|DSN)"
strText = objRegExp.Replace(strText,"<b>$1</b>,<b>$2</b>,<b>$3</b>"))
Response.write strText
</code>
Det jag har gjort är som ovanstående, fast dynamiskt.
myString är hela texten(i detta fallet inlägg i mitt forum)
strReplace(i detta fallet sökorden som man har fyllt i, och som skall fetas)Sv: Problem med att fetmarkera mer än ett ord
Sv: Problem med att fetmarkera mer än ett ord
[REDIGERAT]
Nej de skulla vara där, men jag tror att jag har kommit på varför det krabbar för mig.
Nu blev utskriften:
Ja tänk om $0en vore fyrkantig, vilka problem en $0fot$0smålvakt skulle ha då...
Sökorden som jag hadde var:
fot and boll
Men bägge har ju fått samma id(vet inte vad jag skall kalla det för)
Nu ser jag alltså felet, men hur fixa det?Sv: Problem med att fetmarkera mer än ett ord
objRegExp.Pattern = "(Access)|(databas)|(DSN)"
när det innan stod
objRegExp.Pattern = "(Access|databas|DSN)"
?Sv: Problem med att fetmarkera mer än ett ord
Nu ser det ut som:
Min SQL:
SQL: select * from t_forum where inlagg like '%om%' and inlagg Like'%boll%' ORDER BY inlagg DESC
(Den ser väll rätt ut?)
Pattern:
"(om|boll)"
Om jag inte använder mig av " så blir det:
$0om $0bollen
om och bollen är då fetmarkerade, och man skulle ju kunna tänka på att köra en replace på $0 men det känns inte rätt...Sv: Problem med att fetmarkera mer än ett ord
Sv: Problem med att fetmarkera mer än ett ord