RegEx для соответствия между любыми двумя тегами HTML - PullRequest
1 голос
/ 20 мая 2019

У меня есть следующий контент:

<div class="TEST-TEXT">hi</span>
<a href=\"https://en.wikipedia.org/wiki/TEST-TEXT\">first young CEO's TEST-TEXT</a>
<span class="test">hello</span>

Я пытаюсь сопоставить строку TEST-TEXT, чтобы заменить ее значением, но только когда это текст, а не значение атрибута.

Я проверил концепции прогнозирования и прогнозирования в Regex, но в настоящее время проблема заключается в том, что ему нужно использовать фиксированную ширину для совпадения, вот ссылка regex-match-all-символы -between-two-html-tags , которые показывают случай очень похожий случай, но за исключением того, что есть диапазон с классом для создания соответствия также проверил ссылку regex-match-attribute-in-a-a-html-code

Вот два регулярных выражения, которые я пытаюсь использовать:

  1. \ "([^"] *) \ "
  2. (? S) (? <= <([^ {] *)>) (. +?) (? = </.>)

оба не работают, попробуйте использовать [https://regex101.com/r/ApbUEW/2]

Я ожидаю, что она будет соответствовать только строке, когда это текст текущее поведение соответствует обоим случаям

Редактировать: я хочу, чтобы текст был динамическим и не относился к TEST-TEXT

Ответы [ 5 ]

1 голос
/ 21 мая 2019

RegEx для этой строки между любыми двумя тегами HTML

(?![^<>]*>)(TEST\-TEXT)

0 голосов
/ 20 мая 2019

Может быть, это поможет?

      String html = "<div class=\"TEST-TEXT\">hi</span>\n" +
            "<a href=\\\"https://en.wikipedia.org/wiki/TEST-TEXT\\\">first young CEO's TEST-TEXT</a>\n" +
            "<span class=\"test\">hello</span>";

    Pattern pattern = Pattern.compile("(<)(.*)(>)(.*)(TEST-TEXT)(.*)</.*>");
    Matcher matcher = pattern.matcher(html);
    while (matcher.find()){
        System.out.println(matcher.group(5));
    }
0 голосов
/ 20 мая 2019

Попробуйте TEST-TEXT(?=<\/a>)

TEST-TEXT соответствует ТЕСТ-ТЕКСТ

?= смотрите вперед, чтобы проверить закрывающий тег </a>

см. На regex101

0 голосов
/ 20 мая 2019

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

([A-Z-]+)(<\/)

enter image description here

Демонстрация

Этот фрагмент кода просто показывает, что выражение может быть допустимым:

const regex = /([A-Z-]+)(<\/)/gm;
const str = `<div class="TEST-TEXT">hi</span><a href=\\"https://en.wikipedia.org/wiki/TEST-TEXT\\">first young CEO's
TEST-TEXT</a><span class="test">hello</span><div class="TEST-TEXT">hi</span><a href=\\"https://en.wikipedia.org/wiki/TEST-TEXT\\">first young CEO's
TEST-TEXT</a><span class="test">hello</span>`;
const subst = `NEW-TEXT$2`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

RegEx

Если это выражение нежелательно, его можно изменить или изменить в regex101.com .

RegEx Circuit

jex.im также помогает визуализировать выражения.

enter image description here

0 голосов
/ 20 мая 2019

Как-то так должно помочь:

\>([^"<]*)\<

EDIT:

Без тегов открытия и закрытия:

(?<=\>)([^"<]*)(?=\<)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...