ASP 高亮显示不区分大小写的关键字
程序员文章站
2022-06-17 13:35:25
例如:文本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")
则在网页中显示的是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")