Как выделить искомые слова с помощью регулярного выражения - PullRequest
0 голосов
/ 07 мая 2011

Привет Я работаю над отличным приложением, которое требует от меня выделения (добавления интервалов) для искомого слова. Например, с учетом приведенного ниже текста:

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 Ответ

2 голосов
/ 07 мая 2011

Вероятное решение вряд ли будет возможно с помощью регулярных выражений - проблема слишком сложная.

Разобрать ваш HTML в DOM и рассматривать только текстовые узлы как подходящие для потенциального выделения. Текстовые узлы, по определению, будут только теми частями контента, которые отображаются, и не будут именами элементов, атрибутами / значениями атрибутов и т. Д.

Сложность вашей проблемы сводится к следующему: как найти и выделить строку в другой строке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...