我具有以下内容:
<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
这是我尝试使用的两个正则表达式:
- \“([[^”] *)\“
- (?s)(?<= <([^ {] *)>)(。+?)(?= 。>)
两者都不适合我,请尝试使用[https://regex101.com/r/ApbUEW/2]
我希望它是文本时仅匹配字符串 当前行为与两种情况都匹配
编辑:我希望文本是动态的,而不是特定于TEST-TEXT
答案 0 :(得分:1)
正则表达式,用于任何两个HTML标签之间的字符串
(?![^<>]*>)(TEST\-TEXT)
答案 1 :(得分:0)
这样的事情应该有所帮助:
\>([^"<]*)\<
编辑:
不包含打开和关闭标签:
(?<=\>)([^"<]*)(?=\<)
答案 2 :(得分:0)
答案 3 :(得分:0)
在这里,我们可能只是在所需输出的右侧添加了一个软边界(您已经在执行此操作),然后是所需输出的字符列表,然后进行了收集,之后我们可以使用捕获组进行替换()
。可能与此类似:
([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$2`;
// 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还有助于可视化表达式。
答案 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));
}