使用 ColdFusion 突出显示不区分大小写
Case insensitive highlighting with ColdFusion
正在尝试修复不区分大小写的关键字搜索结果突出显示。这是损坏的代码:
replaceNoCase(text, keyword, '<font style="background-color:yellow;">#keyword#</font>', 'all')
问题当然是文本中关键字的大小写被更改为用户输入的任何内容。
这是 PHP case insensitive highlighting in php 中的解决方案,但我不知道在使用 ColdFusion 的 REReplaceNoCase 函数时访问搜索文本中的匹配值的方法。关于如何解决这个问题的任何想法?
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')
你试过这个吗?但它确实涉及一些布尔逻辑。
编辑:无效。
<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>
更像这样:
highlightedText = reReplaceNoCase(text, "(#keyword#)", '<span class="highlight"></span>', "ALL");
我在我的博客上从头开始相当彻底地研究了 CFML 的正则表达式系统:"Regular expressions in CFML" link summary
如您所说,reReplace 只会用用户输入的任何文本(大小写和全部)替换您的文本。这是我会做的:
- 使用竖线作为分隔符将文本转换为列表(因为
管道在普通文本中很少使用)
- 遍历列表中的每个项目
- 对列表项执行不区分大小写的搜索
- 如果列表项匹配,创建一个新变量
当前项目带有一个开始 span 标签,并附加一个
结束 span 标签(这会保留文本的当前大小写,而不是
而不是用搜索文本替换它)
- 将新变量保存在当前列表位置
- 循环完成后,将管道替换为空格
这是一个快速而粗略的要点。尝试一下,看看它是否适合你:
https://gist.github.com/kriskorsmo/6d02e06bc4a8483b3341
这是我博客上的现场演示:
kriskorsmo.com/examples/highlighting.cfm
我也在其中为您创建了一个简单的 "highlight" 函数。它有两个参数 - keyword 和 originalText - 以及 returns 突出显示关键字的原始文本。
******更好******
在 CFLib.org - http://www.cflib.org/udf/Highlight
处有一个 UDF
正在尝试修复不区分大小写的关键字搜索结果突出显示。这是损坏的代码:
replaceNoCase(text, keyword, '<font style="background-color:yellow;">#keyword#</font>', 'all')
问题当然是文本中关键字的大小写被更改为用户输入的任何内容。
这是 PHP case insensitive highlighting in php 中的解决方案,但我不知道在使用 ColdFusion 的 REReplaceNoCase 函数时访问搜索文本中的匹配值的方法。关于如何解决这个问题的任何想法?
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')
你试过这个吗?但它确实涉及一些布尔逻辑。
编辑:无效。
<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>
更像这样:
highlightedText = reReplaceNoCase(text, "(#keyword#)", '<span class="highlight"></span>', "ALL");
我在我的博客上从头开始相当彻底地研究了 CFML 的正则表达式系统:"Regular expressions in CFML" link summary
如您所说,reReplace 只会用用户输入的任何文本(大小写和全部)替换您的文本。这是我会做的:
- 使用竖线作为分隔符将文本转换为列表(因为 管道在普通文本中很少使用)
- 遍历列表中的每个项目
- 对列表项执行不区分大小写的搜索
- 如果列表项匹配,创建一个新变量 当前项目带有一个开始 span 标签,并附加一个 结束 span 标签(这会保留文本的当前大小写,而不是 而不是用搜索文本替换它)
- 将新变量保存在当前列表位置
- 循环完成后,将管道替换为空格
这是一个快速而粗略的要点。尝试一下,看看它是否适合你: https://gist.github.com/kriskorsmo/6d02e06bc4a8483b3341
这是我博客上的现场演示: kriskorsmo.com/examples/highlighting.cfm
我也在其中为您创建了一个简单的 "highlight" 函数。它有两个参数 - keyword 和 originalText - 以及 returns 突出显示关键字的原始文本。
******更好****** 在 CFLib.org - http://www.cflib.org/udf/Highlight
处有一个 UDF