如何从站点地图生成器中排除网址

How can I exclude urls from Sitemap Generator

本文关键字:排除 站点 地图      更新时间:2023-09-26

由于我在网络上没有找到一个好的(和免费的)工具来生成我的站点地图,我决定从头开始创建一个JavaScript脚本,一切正常,但由于我不太擅长正则表达式,我需要一些帮助。

我有这个函数来处理我的站点地图:

function processSitemap(myUrl,maxLinks,countMe,checkDate,customDate,defPriority,defFreq){
        jQuery.post('../?route=ajax',{sitemap:'1', url:myUrl},function(data){
        var resData = data.split("::|::"); 
        var resCount = parseInt(resData[0]);
        var resLinkData = resData[1];
        var resLinks = resLinkData.split("'n"); 
        var ccLinks = [];
        jQuery(".linksCount").html('<br/>Crawling Link: '+ myUrl +'<br/>Links Found: ' + resLinks.length);
        for (var i = 0; i < resLinks.length; i++) {
        var ccData = resLinks[i].trim();
        if(jQuery.inArray(ccData, linksArr) == -1){
        ccLinks.push(ccData);  
        countLinks++;
        if(countLinks != maxLinks){
        jQuery("#resultList").append('&lt;url&gt;'+''n'); 
        jQuery("#resultList").append('  &lt;loc&gt;'+ ccData + '&lt;/loc&gt;' + ''n'); 
        if(defPriority != 'N/A'){
        jQuery("#resultList").append('  &lt;priority&gt;'+ defPriority + '&lt;/priority&gt;' + ''n'); 
        }
        if(defFreq != 'N/A'){
        defFreqT = defFreq.toString().toLowerCase();
        jQuery("#resultList").append('  &lt;changefreq&gt;'+ defFreqT + '&lt;/changefreq&gt;' + ''n'); 
        }
        if(checkDate != 'N/A'){
            if(checkDate == '1'){
            var fullDate = new Date();
            var twoDigitMonth = fullDate.getMonth()+1+"";if(twoDigitMonth.length==1)  twoDigitMonth="0" +twoDigitMonth;
            var twoDigitDate = fullDate.getDate()+"";if(twoDigitDate.length==1) twoDigitDate="0" +twoDigitDate;
            var currentDate = fullDate.getFullYear() + "-" + twoDigitMonth + "-" + twoDigitDate;
            jQuery("#resultList").append('  &lt;lastmod&gt;'+ currentDate + '&lt;/lastmod&gt;' + ''n'); 
            }
            if(checkDate == '2'){
            customDate = customDate.trim();customDate=customDate.split('/');
            customDate = customDate[2] + "-" + customDate[1] + "-" + customDate[0];
            jQuery("#resultList").append('  &lt;lastmod&gt;'+ customDate + '&lt;/lastmod&gt;' + ''n');   
            }
        }
        jQuery("#resultList").append('&lt;/url&gt;'+''n');
        }else{
          jQuery(".percentimg").fadeOut();
          jQuery("#resultList").append('&lt;/urlset&gt;');
          jQuery(".genCount").html('<br/>Sitemap generated for ' + countLinks + ' links!');
          break;
        }
        }
        }
        if(countLinks == maxLinks){
            return false;
        }
        if (countMe == maxLinksCrawl){
          jQuery(".percentimg").fadeOut();
          jQuery("#resultList").append('&lt;/urlset&gt;');
          jQuery(".genCount").html('<br/>Crawler Limit Reached! <br/> Sitemap generated for ' + countLinks + ' links!');
          return false;
        }
        else{
        linksArr = linksArr.concat(ccLinks);
        myUrl= linksArr[countMe];
        countMe++;
        if (parseInt(countMe) < parseInt(linksArr.length)) {
        processSitemap(myUrl,maxLinks,countMe,checkDate,customDate,defPriority,defFreq);
        }
        else{
          jQuery(".percentimg").fadeOut();
          jQuery("#resultList").append('&lt;/urlset&gt;');
          jQuery(".genCount").html('<br/>Sitemap generated for ' + countLinks + ' links!');
          return false;
        }
        }
    });
}

使用正则表达式,我希望从data一些不需要的网址中排除,例如

https://example.com/notifications&filter=chats
https://example.com/page&b=repost

最简单的方法是什么?

以下测试插入到回调函数中:

function(data){
    // ...
    for (var i = 0; i < resLinks.length; i++) {
        if (resLinks[i].match(/('/notifications&|&b=repost)/)) {
            continue;
        }
        //...
    }
    // ...
}
您可以使用

此正则表达式查找所有带有example.com后跟notifications&b=repost的网址

https:'/'/example.com'/(?=.*(notifications|&b=repost))

正则表达式演示