如何匹配html“a”标签,只使用没有http的标签,使用正则表达式?
即匹配:
blahblah... < a href=\"somthing\" > ...blahblah
但不是
blahblah... < a href=\"http://someting\" > ...blahblah
答案 0 :(得分:6)
使用DOMParser和XPath更容易,而不是正则表达式。
请参阅jsfiddle中的回复。
<强> HTML 强>
<body>
<div>
<a href='index.php'>1. index</a>
<a href='http://www.bar.com'>2. bar</a>
<a href='http://www.foo.com'>3. foo</a>
<a href='hello.php'>4. hello</a>
</div>
</body>
<强> JS 强>
$(document).ready(function() {
var type = XPathResult.ANY_TYPE;
var page = $("body").html();
var doc = DOMParser().parseFromString(page, "text/xml");
var xpath = "//a[not(starts-with(@href,'http://'))]";
var result = doc.evaluate(xpath, doc, null, type, null);
var node = result.iterateNext();
while (node) {
console.log(node); // returns links 1 and 4
node = result.iterateNext();
}
});
备注强>
答案 1 :(得分:4)
答案 2 :(得分:2)
使用jquery,你可以做一些非常简单的事情:
links_that_doesnt_start_with_http = $("a:not([href^=http://])")
编辑:添加://
答案 3 :(得分:0)
var html = 'Some text with a <a href="http://example.com/">link</a> and an <a href="#anchor">anchor</a>.';
var re = /<a href="(?!http:\/\/)[^"]*">/i;
var match = html.match(re);
// match contains <a href="#anchor">
注意:如果您有其他属性,这将无效。
答案 4 :(得分:0)
我正在解释你的问题,因为你的意思是任何(大多数)绝对URI与协议,而不仅仅是HTTP。添加到其他人的错误解决方案。您应该在href上进行此检查:
if (href.slice(0, 2) !== "//" && !/^[\w-]+:\/\//.test(href)) {
// href is a relative URI without http://
}