欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP 高亮显示不区分大小写的关键字

程序员文章站 2022-03-04 16:57:51
例如:文本abcabcabcabcabcabca,关键字bc,在不区分大小写的情况,一共有6个匹配项。   则在网页中显示的是abcabcabcabcabcabca。   ...
例如:文本abcabcabcabcabcabca,关键字bc,在不区分大小写的情况,一共有6个匹配项。
  则在网页中显示的是abcabcabcabcabcabca。
  很多人,想到是replace函数。原型为
    replace(string,find,replacewith[,start[,count[,compare]]])
    string    必选项,字符串表达式,包含要替代的子字符串
    find     必选项,被搜索的子字符串
    replacewith 必选项,用于替换的子字符串
    start    可选项,开始搜索子字符串的位置,默认是1
    count    可选项,执行子字符串替换的数目,默认是-1,表示进行所有可能的替换
    compare  可选项,比较方式,0:二进制比较;1:文本比较
  
  虽然最后一个参数能解决不区分大小写的问题,那么该替换为什么呢?
  因为从示例上看,bc,bc,bc,bc都被搜索到了,却不能统一替换为一个文本
  那么,利用instr这个函数来协助我们吧。
  从源字符串,自左向右搜索,每找到一个匹配项。就按三步走
    1、将匹配项左边的字符串输出
    2、将匹配项套上样式<span>后输出
    3、重复上两步,继续搜索右边的字符串,直到搜索结尾
  代码如下:
复制代码 代码如下:

public function highlight(s,f)
dim tl,tm,tr,k
tl=""
tm=""
tr=s
k=instr(1,tr,f,1)
do while k>0
tl=tl & left(tr,k-1)
tm=mid(tr,k,len(f))
tl=tl & "<span style='color:red'>" & tm & "</span>"
tr=right(tr,len(tr)-len(f)-k+1)
k=instr(1,tr,f,1)
loop
highlight=tl & tr
end function

  调用的时候,代码如下:
  
复制代码 代码如下:

ts="abcabcabcabcabcabca"
tf="bc"
response.write(ts)
response.write("<br/>")
response.write(highlight(ts,tf))

  这样就实现了如开头实例的样子
  另一方面,思考是否用正则表达式更方便呢?尝试了几次,没有结果。看看哪位高手用正则来解决这个问题。
  写了文章以后,网友“愚公”给出了正则表达式的解法。经测试,正确无误。现将他的代码贴于后。非常感谢他。
  
代码
复制代码 代码如下:

function highlight(s,f)
dim regex
set regex = new regexp
regex.ignorecase = true
regex.global = true
regex.pattern = "(" & f & ")"
highlight = regex.replace(s,"<span style='color:red'>$1</span>")
end function
response.write highlight("abcabcabcabcabcabca","bc")