使用ColdFusion进行不区分大小写的突出显示

时间:2015-04-07 00:03:07

标签: coldfusion

尝试修复不区分大小写的关键字搜索结果。这是破碎的代码:

replaceNoCase(text, keyword, '<font style="background-color:yellow;">#keyword#</font>', 'all')

问题当然是文本中关键字的情况会改变为用户输入的内容。

以下是PHP case insensitive highlighting in php中的解决方案,但在使用ColdFusion的REReplaceNoCase函数时,我不知道如何访问搜索文本中的匹配值。有关如何解决这个问题的任何想法?

4 个答案:

答案 0 :(得分:5)

更像这样:

highlightedText = reReplaceNoCase(text, "(#keyword#)", '<span class="highlight">\1</span>', "ALL");

文档:REReplaceNoCase()

我在博客上完全彻底地了解了CFML的正则表达式系统:"Regular expressions in CFML" link summary

答案 1 :(得分:1)

就像你说的那样,reReplace将简单地用你输入的任何文本(case和all)替换你的文本。这就是我要做的事情:

  1. 使用管道作为分隔符将文本转换为列表(因为 管道很少用于普通文本)
  2. 遍历列表中的每个项目
  3. 对列表项执行不区分大小写的搜索
  4. 如果列表项匹配,请创建一个前置的新变量 具有开始范围标记的当前项目,并将其附加到 关闭span标记(这样可以保留文本的当前大小写 而不是用搜索文本替换它)
  5. 将新变量保存在当前列表位置
  6. 循环完成后,用空格替换管道
  7. 这是一个快速而肮脏的要点。试一试,看看它是否适合你: https://gist.github.com/kriskorsmo/6d02e06bc4a8483b3341

    以下是我博客上的现场演示: kriskorsmo.com/examples/highlighting.cfm

    我创建了一个简单的&#34;突出显示&#34;也适合你。它需要两个参数 - keyword和originalText - 并返回原始文本,并突出显示关键字。

    ****** EVEN BETTER ****** 在CFLib.org上有一个UDF - http://www.cflib.org/udf/Highlight

答案 2 :(得分:0)

<强>的ColdFusion

replaceNoCase(text, keyword, '<span style="highlight">#keyword#</span>', 'all')

<强> CSS

.highlight {
    background-color:yellow;
    text-transform: capitalize;
    }

大写将成为第一个字母大写。

你可能想要

replaceNoCase(text, keyword, '<span style="highlight">#lcase(keyword)#</span>', 'all')

答案 3 :(得分:0)

你试过这个吗?但它确实涉及一些布尔逻辑。

编辑:不起作用。

<cfset keyword = "batman">
<cfset text = "SOMETHING BATMAN SOMETHING.">
<cfoutput>
    #(FindNoCase(keyword, text))? ReplaceNoCase(text, keyword, '<font style="background-color:yellow;">' & Mid(text, FindNoCase(keyword, text), Len(keyword)) & '</font>', 'all') : text#
</cfoutput>