突出显示搜索结果字符串大小写问题
Highlight search result string case issue
我正在使用 cfscript,它接受字符串、搜索词和可选的突出显示选项,return 搜索词突出显示的字符串:
<cfscript>
string function highlightKeywords(required string str, required string keywords, struct highlight){
var keyword = "";
var replacement = "";
param name="highlight.tag" default="span";
param name="highlight.attributes" default="style='color:rgb(255,102,0);'";
for (var index=1; index <= listLen( arguments.keywords, " " ); index++){
keyword = ReReplace(listGetAt(arguments.keywords, index, " "), "\(|\)", "", "all" );
replacement = "<#highlight.tag#";
if (len(highlight.attributes)){
replacement &= " #highlight.attributes#";
}
replacement &= ">" & keyword & "</#highlight.tag#>";
arguments.str = reReplaceNoCase( arguments.str, "\b#keyword#\b", replacement, "all" );
}
return arguments.str;
}
</cfscript>
似乎一切正常,除了一个问题。它改变了原始字符串的大小写。
例如,当用户搜索术语“highlight search”时,原始字符串存储为"This is a Highlight Search Testing"。人们会期望它会 return "This is a Highlight Search Testing"。相反,它 returned "This is a highlight search Testing"。它用用户键入的任何内容替换了大小写,而不是保留原始大小写。有人可以帮我吗?提前致谢。
补充说明:
CF 对于反向引用的工作方式不同。
您可以 捕获 带有 "\b(#keyword#)\b"
的关键字(注意捕获括号)并替换为 </code> 对第 1 组值的反向引用以实际替换与关键字的匹配变体。 </p>
<p>使用</p>
<pre><code>replacement &= "></#highlight.tag#>"
然后
arguments.str = reReplaceNoCase( arguments.str, "\b(#keyword#)\b", replacement, "all" )
我正在使用 cfscript,它接受字符串、搜索词和可选的突出显示选项,return 搜索词突出显示的字符串:
<cfscript>
string function highlightKeywords(required string str, required string keywords, struct highlight){
var keyword = "";
var replacement = "";
param name="highlight.tag" default="span";
param name="highlight.attributes" default="style='color:rgb(255,102,0);'";
for (var index=1; index <= listLen( arguments.keywords, " " ); index++){
keyword = ReReplace(listGetAt(arguments.keywords, index, " "), "\(|\)", "", "all" );
replacement = "<#highlight.tag#";
if (len(highlight.attributes)){
replacement &= " #highlight.attributes#";
}
replacement &= ">" & keyword & "</#highlight.tag#>";
arguments.str = reReplaceNoCase( arguments.str, "\b#keyword#\b", replacement, "all" );
}
return arguments.str;
}
</cfscript>
似乎一切正常,除了一个问题。它改变了原始字符串的大小写。
例如,当用户搜索术语“highlight search”时,原始字符串存储为"This is a Highlight Search Testing"。人们会期望它会 return "This is a Highlight Search Testing"。相反,它 returned "This is a highlight search Testing"。它用用户键入的任何内容替换了大小写,而不是保留原始大小写。有人可以帮我吗?提前致谢。
补充说明: CF 对于反向引用的工作方式不同。
您可以 捕获 带有 "\b(#keyword#)\b"
的关键字(注意捕获括号)并替换为 </code> 对第 1 组值的反向引用以实际替换与关键字的匹配变体。 </p>
<p>使用</p>
<pre><code>replacement &= "></#highlight.tag#>"
然后
arguments.str = reReplaceNoCase( arguments.str, "\b(#keyword#)\b", replacement, "all" )