RegExp lookahead
Есть ссылки вида:
<a href="a/b">
<a href="https://abc">
<a href="a/b/">
<a href="http://abc">
<a href="/a/b/">
<a href="tel:abc">
<a href="/a/b">
Собираю ссылки с помощью регулярных, надо отобрать ссылки только без "http" и "https". Но судя по всем у не донкоца понимаю как работает lookhead и lookbehind.
Пытался сделать таким образом:
/\<a.+?(href=.?)(?!https).+?\>/
Но это не работает (мыслил как, находит <a href=" и "заглядывает вперед" если встречает https то должен отбросить).
Как поправить выражение что бы заработало?
Из вариантов можно искать именно ссылки с "http" и "https" заменять тег <a> на допустим <z> и искать уже так: /\<a.+?href.+?\>/. Но хотелось бы с первым вариантом.
P.S. Пользовался PHP preg_match_all, но полагаю для регулярки язык не важен (возможно ошибаюсь).
Ответы (1 шт):
Автор решения: Qwertiy
→ Ссылка
Тебе нужен не lookahead, а lookbehind.
var text = `<a href="a/b">
<a href="https://abc">
<a href="a/b/">
<a href="http://abc/d">
<a href="/a/b/">
<a href="tel:abc">
<a href="/a/b">`
console.log(text.match(/(?<=href="https?:\/\/)[^"]+(?=")/gi))