javascript - 突出显示搜索结果字符串大小写问题

标签 javascript regex coldfusion highlight cfml

我使用的 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>

一切似乎都工作正常,除了一个问题。它更改原始字符串的大小写。

例如,当用户搜索术语“突出显示搜索”时,原始字符串存储为“这是突出显示搜索测试”。人们会期望它会返回“这是一项突出显示搜索测试”。相反,它返回“这是一个突出显示搜索测试”。它用用户输入的任何内容替换了大小写,而不是保留原始大小写。有人可以帮我吗?提前致谢。

附加说明: CF 对于反向引用的工作方式有所不同。

最佳答案

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

使用

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

然后

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

关于javascript - 突出显示搜索结果字符串大小写问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47277490/

相关文章:

c# - Dropzone.js:将图像上传到 ASP.NET 中的服务器

json - SerializeJSON 不编码 ColdFusion 9 中的 UTF8 字符

Coldfusion 日期转换 : "2013-11-15T06:11:57.87 is an invalid date or time string"

Coldfusion:如何使用 cfthrow 转储参数范围?

c - 如何在 C 源代码中搜索简单的 if 语句?

c# - 如何在 C# 中转换或编写此 Javascript 数组

javascript - 如何将换行符从 HTML div 复制到 jQuery 中的文本区域?

javascript - 在 ASP.NET 代码中通过 javascript 重置 Jquery 验证后停止回发

javascript - 比较两个数组并在正则表达式后返回唯一值

php - 正则表达式 PHP,提取 id 并替换