我正在尝试在><
之间的HTTP页面中匹配字符串。
我在处理第一个>
时遇到了麻烦,因为它也与后续的字符匹配。例如。在这个例子中
<a href="https://stackoverflow.com" class="-logo js-gps-track"
data-gps-track="top_nav.click({is_current:false, location:3, destination:8})">
<span class="-img _glyph">Stack Overflow</span>
</a>
我只想匹配Stack Overflow
。我目前有\>([^\>].*Stack Overflow.*)\<
但匹配第一个>
之后的所有内容,即
><span class="-img _glyph">Stack Overflow<
任何帮助都会很棒
使用DOMParser并取textContent
的.-img._glyph
可能会更好一些:
const str = `<a href="https://stackoverflow.com" class="-logo js-gps-track"
data-gps-track="top_nav.click({is_current:false, location:3, destination:8})">
<span class="-img _glyph">Stack Overflow</span>
</a>`;
console.log(
new DOMParser().parseFromString(str, 'text/html').querySelector('.-img._glyph').textContent
);
如果您had使用正则表达式,则不重复.
(匹配任何内容),而应重复[^<>]
(匹配不匹配<
或>
的任何内容) Stack Overflow
部分,同时向前和向后寻找<
和>
:
(?<=>)[^<>]*Stack Overflow[^<>]*(?=<)
((如果无法使用后向搜索,则匹配初始的(?<=>)[^<>]*Stack Overflow[^<>]*(?=<)
并随后捕获所有内容,然后提取捕获组)
尝试使用>
,如此正则表达式:lookbehind and lookahead assertions
(?<=>)Stack Overflow(?=<)