#regex #grails #groovy
#регулярное выражение #grails #groovy
Вопрос:
Привет, я работаю над отличным приложением, которое требует, чтобы я выделял (добавлял промежутки) к искомому слову.Например, учитывая текст ниже :
youtube
[href="youtube.com] i am here , in Youtube[/a]
Я хочу выполнить поиск по слову «youtube», и когда оно вернется, приведенный выше текст должен выглядеть следующим образом :
[span]youtube[span]
[href="youtube.com] i am here , in [span]Youtube[/span] [/a]
Слово youtube, содержащееся в href или в iframe, должно игнорироваться.
На данный момент у меня есть следующий код :
def m = test =~ /([^<]*)?(youtube)/
println m[0]
def highLightText = { attrs, body ->
def postBody = attrs.text
def m = postBody =~ /(?i:${attrs.searchTerm})/
def array = []
m.each{
array << it as String
}
array.unique()
String result = postBody
array.each{
result = result.replaceAll("${it}", "<span class='highlight'>${it}</span>")
}
out << result
}
И это возвращает :
[span]youtube[span]
[href="[span]youtube[span].com] i am here , in [span]Youtube[/span] [/a]
Кто-нибудь может мне помочь с регулярным выражением, которое может выбирать только слова, которые не содержатся в ссылках или других тегах.
Спасибо
Ответ №1:
Вряд ли с помощью регулярных выражений можно достичь приемлемого решения — проблема слишком сложна.
Проанализируйте свой HTML в DOM и рассмотрите только текстовые узлы как подходящие для потенциального выделения. Текстовые узлы по определению будут представлять собой только те фрагменты содержимого, которые отображаются, и не будут именами элементов, атрибутами / значениями атрибутов и так далее.
Затем сложность вашей проблемы сводится к следующему: как мне найти и выделить строку внутри другой строки?