Соответствие регулярному выражению, содержащее строку между 2 символами - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь сопоставить строку на странице 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.*)\<, но это соответствует всему после первого > ie

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

Любая помощь будет отличной

Ответы [ 2 ]

3 голосов
/ 15 февраля 2020

Возможно, было бы более элегантно использовать 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
);

Если у вас было для использования регулярных выражений, вместо повторения . (что соответствует чему-либо), повторите [^<>] (что соответствует любому, что не < или >) по обе стороны от Stack Overflow части, глядя вперед и назад на < и >:

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

(Если вы не можете использовать lookbehind, сопоставьте начальный > и захватите все впоследствии, затем извлеките группу захвата)

0 голосов
/ 15 февраля 2020

Попробуйте использовать утверждения вида назад и вперед , как в этом регулярном выражении: (?<=>)Stack Overflow(?=<)

const text = `<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>`;
const regex = /(?<=>)Stack Overflow(?=<)/g;
const found = text.match(regex);

console.log(found);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...