RegEx用于在任何两个HTML标签之间进行匹配

时间:2019-05-20 12:06:53

标签: java regex pcre regex-greedy replaceall

我具有以下内容:

<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字符串以替换它为value,但仅当它是文本且不在属性值之内时。

我已经在正则表达式中检查了超前和超前的概念,但是当前的问题是它需要为匹配使用固定宽度,这里是一个链接regex-match-all-characters-between-two-html-tags类似的情况,但有一个跨度与一个类来创建匹配项 还检查了链接regex-match-attribute-in-a-html-code

这是我尝试使用的两个正则表达式:

  
      
  1. \“([[^”] *)\“
  2.   
  3. (?s)(?<= <([^ {] *)>)(。+?)(?=
  4.   

两者都不适合我,请尝试使用[https://regex101.com/r/ApbUEW/2]

我希望它是文本时仅匹配字符串 当前行为与两种情况都匹配

编辑:我希望文本是动态的,而不是特定于TEST-TEXT

5 个答案:

答案 0 :(得分:1)

正则表达式,用于任何两个HTML标签之间的字符串

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

答案 1 :(得分:0)

这样的事情应该有所帮助:

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

编辑:

不包含打开和关闭标签:

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

答案 2 :(得分:0)

尝试TEST-TEXT(?=<\/a>)

TEST-TEXT匹配测试文本

?=向前检查结束标记</a>

请参阅 regex101

答案 3 :(得分:0)

在这里,我们可能只是在所需输出的右侧添加了一个软边界(您已经在执行此操作),然后是所需输出的字符列表,然后进行了收集,之后我们可以使用捕获组进行替换()。可能与此类似:

([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电路

jex.im还有助于可视化表达式。

enter image description here

答案 4 :(得分:0)

也许这会有所帮助?

      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));
    }