【问题标题】:Freemarker string highlightingFreemarker 字符串突出显示
【发布时间】:2013-02-07 13:36:09
【问题描述】:

我想用 searchedText 字符串突出显示字符串的一部分。

示例: 我有一个产品参考 abcDeFg(区分大小写),有人使用参考“def”搜索产品。结果应该是abc<span class="hl">DeF</span>g

问题:结果应该是突出显示的产品参考(区分大小写) 异常结果:abc<span class='light'>DeF</span>g 我的结果:abc<span class='light'>def</span>g(def 很小)

目前我正在使用

 <#assign prodRef = product.getReference()>
 <#if (prodRef?lower_case?index_of(searchedText?lower_case) > -1)>
   <#assign textToReplace = "<span class='light'>" + searchedText + "</span>">
   ${product.reference?replace(searchedText, textToReplace, "i")}
 </#if>

谁能告诉我如何解决这个问题? 基本上我需要替换字符串函数来保持原始引用的大小写敏感性。

【问题讨论】:

  • lower_case 没有破坏性;你确定searchedText 之前不是小写的吗?
  • 我的代码的第二行不影响产品的参考。我只是用它来查明产品参考中是否存在 searchedText。
  • 我明白这一点。我要求您在到达该行之前确保它实际上是混合大小写的,因为这里没有任何东西可以将其输出为小写。
  • 其实有:我明白为什么输出是小写的,但我找不到解决方案。输出是小写的,因为 textToReplace 是小写的(因为 searchedText 是小写的'def')。
  • 不要盲目替换文本,而是找到字符串的开始/停止索引并构建一个新的输出字符串。

标签: java freemarker


【解决方案1】:

一个正则表达式可以单独做到这一点:

${product.reference?replace(
     "(" + searchedText + ")",
     "<span class='light'>$1</span>",
     "ri"
)}

但是,searchText 不能包含任何在正则表达式中具有特殊含义的字符(或者必须转义)。

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2016-03-26
    • 2014-06-15
    • 1970-01-01
    • 2013-12-17
    • 2012-02-26
    • 2013-10-21
    • 2015-06-24
    • 2012-09-09
    相关资源
    最近更新 更多