正则表达式在href属性中查找没有http或https的锚标签

时间:2013-04-09 10:14:29

标签: regex regex-negation regex-lookarounds

我有这个示例文本,我想运行正则表达式来拉取地址部分中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>

THX。

1 个答案:

答案 0 :(得分:2)

使用JavaScript正则表达式方法(在几乎所有语言中都有等价物):

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

OR

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

你选择!