如何查找每个<a href=""> for html using regular expression(JS)</a>

时间:2014-03-30 20:17:56

标签: javascript regex

这是我的疑问。我得到了我的html的每个href的行(正则表达式),但是我需要得到不属于我的域的那些。我认为有一些特定的东西可以帮助我做到这一点,或者一些特别的提示。

这是我的正则表达式:

var re=/(?:<a *(?:(?!href)(?:\w)+="(?:[^"]+)")* *)href="([^"]+)"/g;

我正在使用node.js.所以我正在做的是运行它(someFile.js)。小.js只是收到myHtmlpage.html并尝试从该域中获取每个href。

//编辑
想法是尝试改变那个正则表达式,我知道它可能有点傻,但我需要使用正则表达式

2 个答案:

答案 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);

JS Fiddle demo

对于那些不喜欢上述方法(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);

JS Fiddle demo

参考文献: