用于匹配任意两个 HTML 标签的正则表达式

RegEx for matching between any two HTML tags

我有以下内容:

<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 中前瞻和后视的概念,但当前的问题是它需要为匹配使用固定宽度,这里是 link regex-match-all-characters-between-two-html-tags 展示了一个非常相似的案例,但有一个例外,即有一个 class 的跨度来创建匹配 还检查了 link regex-match-attribute-in-a-html-code

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

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

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

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

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

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

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

编辑:

不包括打开和关闭标签:

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

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

TEST-TEXT 匹配 TEST-TEXT

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

见于 regex101

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

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

演示

此片段只是为了表明表达式可能有效:

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`;

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

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

正则表达式

如果不需要此表达式,可以在 regex101.com 中对其进行修改或更改。

正则表达式电路

jex.im 也有助于形象化表达。

也许这会有帮助?

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

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

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