
03-07-2006, 12:39 PM
|
|
Registered User
|
|
Join Date: Jul 2004
Posts: 249
|
|
|
ASP: highlight a section of words only
This code highlights words entirely. I look for the word nation it highlights words like abomination. So I only want the function to highlight whatever I'm looking for.
Code:
dim strKeywords, strText, strFore, strAft, bolInComplete
dim Text1, Text2, Text3, Text4, Text5, Text6
dim keywordarray, counter
Text1=Request("Keyword")
Text2=Request("Keywordb")
Text3=Request("Keywordc")
Text4=Request("Keywordd")
Text5=Request("Keyworde")
Text6=Request("Keywordf")
strAft="</b></font>"
bolInComplete=true
Do until RS.eof
strText =rs("text_data")
IF Text1<>"" THEN
strFore="<font color=red><b>"
strText=HighlightKeywords(strText,Text1, strFore, strAft,bolInComplete)
End If
IF Text2<>"" THEN
strFore="<font color=blue><b>"
strText=HighlightKeywords(strText,Text2, strFore, strAft,bolInComplete)
End If
IF Text3<>"" THEN
strFore="<font color=green><b>"
strText=HighlightKeywords(strText,Text3, strFore, strAft,bolInComplete)
End If
IF Text4<>"" THEN
strFore="<font color=orange><b>"
strText=HighlightKeywords(strText,Text4, strFore, strAft,bolInComplete)
End If
IF Text5<>"" THEN
strFore="<font color=purple><b>"
strText=HighlightKeywords(strText,Text5, strFore, strAft,bolInComplete)
End If
IF Text6<>"" THEN
strFore="<font color=aqua><b>"
strText=HighlightKeywords(strText,Text6, strFore, strAft,bolInComplete)
End If
Response.Write "<sup>" & rs("verse") & "</sup>" & strText & "</br>"
rs.movenext
Loop
else
response.write "No verses found"
End If
Function HighlightKeywords(byVal strText, byRef strKeywords, byRef strFore, byRef strAft, byVal bolInComplete)
' Dim the variables.
dim arrKeywords
dim strPattern, strReplace
dim i
dim arrstrFore
' Split the list of keywords into an array for easy iteration.
arrKeywords = Split(strKeywords,"/")
'arrstrFore=Split(strFore,",")
' Loop through the array of keywords and build the strings needed for the highlighting.
For i=0 to UBound(arrKeywords,1)
' Build the pattern string. Basically what we are saying is:
' Find all instances of this word that are distinct words not in pointed brackets.
' If we are not to find incomplete words then use the rigid pattern.
If Not bolInComplete Then
strPattern ="(?!<)\b(" & arrKeywords(i) & ")\b(?!>)"
'strPattern = arrKeywords(i)
' Else allow for characters following the keyword before the word break.
Else
strPattern ="(?!<)\b(\w*" & arrKeywords(i) & "\w*)\b(?!>)"
'strPattern =arrKeywords(i)
End If
' Build the replace string. This tells the regexp what to replace the instances found
' with. We use the $1 to say: Use the value that was there. This is good for use when
' you don't want to change the case of the existing word.
strReplace = strFore & "$1" & strAft
'strReplace = "$1"
' Call the helper routine.
strText = Highlight(strText,strPattern,strReplace,True)
'response.write arrstrFore(i)
'response.write arrKeywords(i)
Next'i'
' Return the newly formatted string.
HighlightKeywords = strText
End Function
Function Highlight(byVal strText, byRef strPattern, byRef strReplace,byRef bolIgnoreCase)
' Dim the Variables
dim mobjRegExp
dim i
' Initialize the Regular Expressions Object.
Set mobjRegExp = New RegExp
' Set it to find all matches.
mobjRegExp.Global = True
' This parameter tells RegExp if it should be case sensitive or insensitive.
' This is a parameter that should be specified by the calling function.
mobjRegExp.IgnoreCase = bolIgnoreCase
' The pattern to find. This is the most difficult part of using RegExps.
mobjRegExp.Pattern = strPattern
' Call the replace method of the RegExp object. This will do all the work.
strText = mobjRegExp.Replace(strText,strReplace)
' Kill the object.
Set mobjRegExp = Nothing
' Return the newly formatted string.
Highlight = strText
End Function
rs.close
conn.close
|

03-08-2006, 09:22 AM
|
 |
Moderator
|
|
Join Date: May 2003
Posts: 1,445
|
|
|
I know absolutely nothing about ASP, but there are two ways this is usually done with coding.
1) There is usually a difference between the way you match strings. For instance, in Perl, if you use ~=, it will look for a partial match (like, it will find "nation" within the word "abomination"). If you use ==, it will look for a full match.
2) You simply insert a space before and after the string you're searching for. If you want to only highlight the word "nation", then you set up your script to search for " nation ". That way, it won't find "nation" within the word "abomination", because there is no space before/after the string "nation" within that word.
__________________
I hate Internet Explorer! Anyone with me?
|

06-22-2006, 11:56 PM
|
|
Registered User
|
|
Join Date: Jul 2004
Posts: 249
|
|
I don't know if I accidentally play around with the script. But now it's showing error:
Quote:
Microsoft VBScript runtime error '800a139a'
Unexpected quantifier
/wheelofgod/showverse.asp, line 210
|
Line 210 shows:
Code:
strText = mobjRegExp.Replace(strText,strReplace)
|
| Thread Tools |
|
|
| Display Modes |
Rate This Thread |
Linear Mode
|
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -5. The time now is 05:35 PM.
|
|
|