首页 > 解决方案 > 包含 2 个字符之间的字符串的正则表达式匹配

问题描述

我正在尝试在><.

我遇到了第一个问题,>因为它也匹配后续字符。例如。在这个例子中

<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.*)\< ,但这与第一个>ie之后的所有内容相匹配

><span class="-img _glyph">Stack Overflow<

任何帮助都会很棒

标签: javascriptregex

解决方案


使用 DOMParser 可能会更优雅,并采用textContentof .-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
);

如果您必须使用正则表达式,而不是重复.(匹配任何内容),在零件的任一侧重复[^<>](匹配任何不是 a<或的内容) ,同时向前和向后查看and :>Stack Overflow<>

(?<=>)[^<>]*Stack Overflow[^<>]*(?=<)

(如果不能使用lookbehind,匹配初始>并随后捕获所有内容,然后提取捕获组)


推荐阅读