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');})
Твой выбор!