NodeJS for-loop在修剪以数字结尾的网址时失败

时间:2014-12-20 01:20:00

标签: string node.js facebook for-loop replace

我正在尝试使用一组Facebook页面网址并仅提取网页的实体标题。即'https://www.facebook.com/BalanceSpaBoca'我只关注'BalanceSpaBoca'。此脚本适用于我正在使用的大多数示例数据(testFBurls数组),仅打印修剪后的字符串。但是,对于其他人,它会打印修剪过的字符串和原始字符串。似乎所有打印两次的网址都以一串数字结尾,但我不确定为什么这会对程序的运行方式产生任何影响。

var testFBurls = [
    'http://www.facebook.com/pages/A-Yoga-Way/361702000576231',
    'http://www.facebook.com/aztigurbansalon',
    'https://www.facebook.com/pages/Azzurri-Salon-Spa/542579982495983',
    'https://www.facebook.com/BalanceSpaBoca',
    'https://www.facebook.com/BocaAmericanNailsandSpa',
    'http://www.facebook.com/beachyogagirl',
    'https://www.facebook.com/pages/Beauty-of-Wax/156355679240',
    'http://www.facebook.com/beehivefitness.boca',
    'https://www.facebook.com/pages/Believe-Day-Spa-Boutique/197615685896',
    'https://www.facebook.com/photo.php?fbid=10151725966640897&set=a.10151725965355897.1073741828.197615685896&type=1&theater',
    'http://facebook.com/pages/bigfoot-spa/1486364798260300',
    'http://www.facebook.com/bloheartsyou',
    'http://www.facebook.com/pages/The-Wellness-Center-Of-Boca-Raton/170371382995576',
    'https://www.facebook.com/TherapyBodyBalanced',
    'https://www.facebook.com/pages/BodyVital-Massage/177664492277158',
    'https://www.facebook.com/bodyworkmall',
    'https://www.facebook.com/pages/The-Bombay-Room-Yoga-Studio/148731658497764',
    ];

var possibleFBurlStarts = [
    "https://www.facebook.com/", 
    "http://www.facebook.com/", 
    "https://www.facebook.com/pages/", 
    "http://www.facebook.com/pages/",
];


for (var count=0; count<testFBurls.length; count++){
    var currentURL = testFBurls[count];
    if (currentURL.indexOf(".com/photo") > -1) {
        testFBurls.splice(i, 1);
        i--;
    }
    for (var i=0; i < possibleFBurlStarts.length; i++){
        var indexOfSubstring = currentURL.indexOf(possibleFBurlStarts[i]);
        if (indexOfSubstring > -1) {
            var res = currentURL.replace(possibleFBurlStarts[i], "");
        }
    }
    if (count == testFBurls.length-1){
        console.log(testFBurls);
    }
}

这是我的控制台输出

pages/A-Yoga-Way/361702000576231
A-Yoga-Way/361702000576231
aztigurbansalon
pages/Azzurri-Salon-Spa/542579982495983
Azzurri-Salon-Spa/542579982495983
BalanceSpaBoca
BocaAmericanNailsandSpa
beachyogagirl
pages/Beauty-of-Wax/156355679240
Beauty-of-Wax/156355679240
beehivefitness.boca
pages/Believe-Day-Spa-Boutique/197615685896
Believe-Day-Spa-Boutique/197615685896
bloheartsyou
pages/The-Wellness-Center-Of-Boca-Raton/170371382995576
The-Wellness-Center-Of-Boca-Raton/170371382995576
TherapyBodyBalanced
pages/BodyVital-Massage/177664492277158
BodyVital-Massage/177664492277158
bodyworkmall
pages/The-Bombay-Room-Yoga-Studio/148731658497764
The-Bombay-Room-Yoga-Studio/148731658497764

请注意,第一个网址列出了两次(第一个是原始格式,其次是截断形式),但第二个网址(输出中的第三行)仅以截断形式列出。是什么导致了这种差异?只应打印截断的网址。

1 个答案:

答案 0 :(得分:2)

当你迭代它时,你正在修改你正在迭代的数组:testFBurls.splice(i, 1);这通常是一个不太好的事情。无论如何,我认为你应该能够通过简单的正则表达式轻松实现目标:

for (var count=0; count<testFBurls.length; count++){
    var matches = testFBurls[count].match(/^https?\:\/\/www\.facebook\.com\/(?:pages\/)?([^\/]+)/);
    if (matches) {
        console.log('found it:', matches[1]);
    }
}