Regex匹配包含2个字符之间的字符串

问题描述 投票:0回答:2

我正在尝试在><之间的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<

任何帮助都会很棒

javascript regex
2个回答
3
投票

使用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[^<>]*(?=<)并随后捕获所有内容,然后提取捕获组)


0
投票

尝试使用>,如此正则表达式:lookbehind and lookahead assertions

(?<=>)Stack Overflow(?=<)
© www.soinside.com 2019 - 2024. All rights reserved.