用于匹配任意两个 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
这是我正在尝试的两个正则表达式:
- \"([^"]*)\"
- (?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)
我有以下内容:
<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
这是我正在尝试的两个正则表达式:
- \"([^"]*)\"
- (?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)