这是我的疑问。我得到了我的html的每个href的行(正则表达式),但是我需要得到不属于我的域的那些。我认为有一些特定的东西可以帮助我做到这一点,或者一些特别的提示。
这是我的正则表达式:
var re=/(?:<a *(?:(?!href)(?:\w)+="(?:[^"]+)")* *)href="([^"]+)"/g;
我正在使用node.js.所以我正在做的是运行它(someFile.js)。小.js只是收到myHtmlpage.html并尝试从该域中获取每个href。
//编辑
想法是尝试改变那个正则表达式,我知道它可能有点傻,但我需要使用正则表达式
答案 0 :(得分:1)
您可以使用querySelectorAll
使用属性选择器以及与您的域名不匹配的参数轻松完成此操作。
var elements = document.querySelectorAll("a[href]:not([href='yourdomain'])");
你不应该使用hge。
答案 1 :(得分:1)
我个人建议避免正则表达式解析HTML(不规则语言),而是使用JavaScript:
/* uses Array.prototype.filter on the NodeList returned
by document.querySelectorAll, retains only those elements
that match the supplied filter expression:
*/
var els = [].filter.call(document.querySelectorAll('a'), function(a){
/* assesses whether the href of the a elements link to a different
domain than the current domain; if so that element is retained
and forms part of the resulting array:
*/
return a.href.indexOf(document.location.host) == -1;
// using Array.prototype.forEach to iterate over the created array:
}).forEach(function(a){
/* adds the classname 'outofdomain' to the classList,
obviously amend this to do whatever you prefer:
*/
a.classList.add('outofdomain');
});
console.log(els);
对于那些不喜欢上述方法(IE8及更低版本)的浏览器:
// get all the 'a' elements:
var aElems = document.getElementsByTagName('a'),
// get the current domain's hostname:
host = document.location.hostname,
// create an array to push the matched elements:
outofdomain = [];
// iterating over the 'a' elements found earlier:
for (var i = 0, len = aElems.length; i < len; i++){
// if the hostname is not found in the href
if (aElems[i].href.indexOf(host) == -1){
// we add it into the array:
outofdomain.push(aElems[i]);
// set the class-name:
aElems[i].className = 'outofdomain';
}
}
console.log(outofdomain);
参考文献: