Regex, чтобы найти теги привязки без http или https в атрибуте href

У меня есть этот пример текста, на котором я хочу запустить регулярное выражение, чтобы вытащить якорные теги, чей href не содержит http | https в адресной части.

Я пытался с этим регулярным выражением, и оно еще не завершено. Я не могу оторвать якорь, когда они не начинаются с http или https.

Ссылка на сайт gskinner - http://regexr.com/?34ev0

<a.*?href=[""|'](http|https:\/\/)(?<link>[^""|']*)[""|'].*?>

Вот пример строки:

<br /><span style="font-size: 16px;"><strong><a target="_blank" href="http://www.yahoo.com">Good Link (Yahoo)</a><br /><br /><a target="_blank" href="www.bbc.com">Bad Link (BBC)</a><br /><br /><a href="" id="anchorSocialMedia" onclick="ShowModalPopup('anchorSocialMedia','/Events/Popup/SocialMediaShareModal.aspx','650px','500px');">Share This Event</a><br />Badge Perf Testing<br /><br /></strong></span>

Спасибо.

1 ответ

Решение

Используя методы регулярных выражений JavaScript (есть эквиваленты почти во всех языках):

<your string>.match(/<a\s[^>]*href\s*=\s*"[^"]*"[^>]*>/g)
.join('')
.match(/href\s*=\s*"(?!https?:\/\/)[^"]*"/g);

ИЛИ ЖЕ

<your string>.match(/<a\s[^>]*href\s*=\s*"(?!https?:\/\/)[^"]*"[^>]*>/g)
.map(function(x){return x.replace(/.*(href\s*=\s*"[^"]*").*/,'$1');})

Твой выбор!

Другие вопросы по тегам