Выделение строки Freemarker

Я хотел бы выделить часть строки с помощью строки searchText.

Exemple: I have a product reference abcDeFg (case sensitive) and someone search for product with reference "def". The result should be abcDeFg

Problem: the result should be the highlighted product reference (case sensitive) Excepted result: abcDeFg My result: abcdefg (def is minuscule)

В настоящее время я использую

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

Может ли кто-нибудь сказать мне, как исправить эту проблему? В основном мне нужно заменить строковые функции, которые будут держать чувствительность к исходным данным.

0
nl ja de
lower_case не является разрушительным; вы уверены, что searchText не относится к нижнему регистру раньше, если это произойдет?
добавлено автор Dave Newton, источник
Я это понимаю. Я прошу вас убедиться, что это действительно смешанный случай, прежде чем он дойдет до этой строки, потому что здесь нет ничего, что могло бы выводить его как строчный.
добавлено автор Dave Newton, источник
... тогда что-то делает его строчным, прежде чем он попадет в шаблон, и это именно то, что я сказал. Если вы понимаете, что why имеет строчные буквы, вы также можете сделать его not строчным, поскольку не требуется сам шаблон. Что I сказал , что здесь ничего нет, что выводит его в нижнем регистре, если он еще не имеет нижний регистр .
добавлено автор Dave Newton, источник
Не слепо замените текст, вместо этого найдите индексы начала/остановки строки и постройте новую выходную строку.
добавлено автор Dave Newton, источник
Вторая строка моего кода не влияет на ссылку продукта. Я просто использую его, чтобы узнать, существует ли searchText в ссылке на продукт.
добавлено автор gospodin, источник
На самом деле есть: я понимаю, почему вывод lowecase, но я не могу найти решение. Вывод в нижнем регистре, поскольку textToReplace находится в lowerCase (так как searchText является «def» в нижнем регистре).
добавлено автор gospodin, источник
В моем примере, в строке 4, product.reference является «abcDeFg», а textToReplace - это def (его «def» в нижнем регистре просто потому, что пользователь искал в нижнем регистре). Таким образом, строка, которая выполняет замену, даст мне «abc просто потому, что функция замены работает именно так. Проблема заключается в следующем: как сохранить в выходе такую ​​же чувствительность, как в исходном значении (product.reference)?
добавлено автор gospodin, источник

1 ответы

Регулярное выражение может сделать это в одиночку:

${product.reference?replace(
     "(" + searchedText + ")",
     "$1",
     "ri"
)}

Тем не менее, тогда searchText не должен содержать символов, имеющих особое значение в регулярных выражениях (или они должны быть экранированы).

2
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async