Function Highlight(ziduan,keywords)
Dim RegEx,ArrayKeywords,i
Set RegEx=new RegExp
RegEx.IgnoreCase=True'不区分大小写
RegEx.Global=True
ArrayKeywords = Split(keywords," ")'用空格隔开的多关键字
For i=0 To Ubound(ArrayKeywords)
RegEx.Pattern="("&ArrayKeywords(i)&")"
ziduan=RegEx.Replace(ziduan,"<font color='red'>$1</font>" )
Next
Set RegEx=Nothing
Highlight=ziduan
End Function
response.write Highlight("12*a","12*a")高手支招,上面是一个高亮显示搜索关键字的代码,现在遇到的问题是当ziduan遭遇星号的时候就不起作用了,怎样才能实现把*当成一个普通的字符串进行比较!我想要的结果是当ziduan或keywords中包含星号时也能高亮显示,在此谢过了!

解决方案 »

  1.   

    ASP的问题该去ASP问
    *有时候可以用Chr(42)代替
    你看一下是不是这样:
    response.write Highlight("12" & Chr(42) & "a","12" & Chr(42) & "a")
      

  2.   

    因为正则中*是元字符,所以如果要替换的字符含有*那么就可能会出错得不到想要的结果了。不过对于这样的情况是有办法解决的,你可以把所有*替换成\*,加\表示转移,但是正则中元字符有很多普通的+-*/%?=:!^$[]()等等都是,要是一个个都去替换一遍效率肯定就很低了。所以不建议用正则。你既然都循环了,那么直接用replace吧。
    Function Highlight(ziduan, keywords)
        Dim ArrayKeywords, i
        ArrayKeywords = Split(keywords, " ") '用空格隔开的多关键字
        For i = 0 To UBound(ArrayKeywords)
            ziduan = Replace(ziduan, ArrayKeywords(i), "<font color='red'>" & ArrayKeywords(i) & "</font>")
        Next
        Highlight = ziduan
    End Function
    response.write Highlight("12*a","12*a")你那个正则表达式其实可以一次生成的:
    Function Highlight(ziduan, keywords)
        Dim RegEx
        Set RegEx = CreateObject("vbscript.RegExp")
        RegEx.IgnoreCase = True '不区分大小写
        RegEx.Global = True
        keywords = Replace(keywords, "*", "\*") '将特殊字符*转义,其他的+-/等用同样方法替换
        RegEx.Pattern = "(" & Replace(keywords, " ", "|") & ")"
        ziduan = RegEx.Replace(ziduan, "<font color='red'>$1</font>")
        Set RegEx = Nothing
        Highlight = ziduan
    End Function
    response.write Highlight("12*a","12*a")
      

  3.   


    不好意思,我刚上csdn,发贴的时候好像没发现有asp的版块耶!