【问题标题】:Highlight search result string case issue突出显示搜索结果字符串大小写问题
【发布时间】:2018-04-26 21:53:27
【问题描述】:

我正在使用一个 cfscript,它接受一个字符串、搜索词和可选的突出显示选项,并返回突出显示搜索词的字符串:

<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”。人们会期望它会返回“这是一个突出显示搜索测试”。相反,它返回“这是一个高亮搜索测试”。它用用户输入的任何内容替换了大小写,而不是保留原始大小写。有人可以帮助我吗?提前致谢。

补充说明: CF 对反向引用的工作方式不同。

【问题讨论】:

  • replacement &amp;= "&gt;" &amp; keyword &amp; "&lt;/#highlight.tag#&gt;"; => replacement &amp;= "&gt;$&amp;&lt;/#highlight.tag#&gt;";
  • @WiktorStribiżew 我试过了,但它不起作用。突出显示的单词变成了'$&'。我得到了“这是 $& 测试”
  • @WiktorStribiżew 很抱歉,我不明白你的意思。您可以添加作为解决方案吗?
  • 看起来 CF 正则表达式不支持 $n backreference syntax,我不确定 \0 是否有效。因此,您需要包装关键字,然后在替换模式中使用\1 反向引用。
  • 尝试replacement &amp;= "&gt;\1&lt;/#highlight.tag#&gt;" 然后reReplaceNoCase( arguments.str, "\b(#keyword#)\b", replacement, "all" )

标签: javascript regex coldfusion highlight cfml


【解决方案1】:

您可以捕获带有"\b(#keyword#)\b"(注意捕获括号)的关键字,并用\1 反向引用此第1 组值替换,以实际替换为关键字的匹配变体。

使用

replacement &= ">\1</#highlight.tag#>"

然后

 arguments.str = reReplaceNoCase( arguments.str, "\b(#keyword#)\b", replacement, "all" )

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2014-03-07
    • 2010-09-16
    • 1970-01-01
    • 2012-11-18
    相关资源
    最近更新 更多