2015-10-31 42 views
0

我試圖在設定的時間間隔從數據庫中查詢詞匹配,並針對他們Twitter的API,我想不出如何將變量更新禁忌詞彙串匹配

var bannedName = rows[0].name; 

成這種表達,現在只是把bannedName變量將導致undentified

if(!tweetTextRetweet.match(/^RT|@TopU3DAssets|@LatestAssetBot|@IndieLeverage|@Parodossy|@GameArtSleuth|@Alex_TNT/)) 

導致像

if(!tweetTextRetweet.match(bannedName)) 

爲了讓它工作和匹配這個詞。如果我把查詢外間隔數據庫改變時它不會更新查詢把結果未修改

這裏是我目前有

setInterval(function() { 

    con.query("SELECT setting,name FROM droid_settings WHERE ID = 2", function(error,rows){ 
     var bannedName = rows[0].name; 
     console.log('INFO ------- ',bannedName); 

    }); 

    for (var i = 0; i < tweets.length; i++) { 
     var tweetTextRetweet = tweets[i].text; 

     if (!tweetTextRetweet.match(/^RT|@TopU3DAssets|@LatestAssetBot|@IndieLeverage|@Parodossy|@GameArtSleuth|@Alex_TNT/)) { // search for RT and @ 
      console.log('INFO -------',tweets[i].id); 
      dateTime(); 
      console.log('INFO -------',tweets[i].text); 


      tweets.length = 0; 
     }else{ 
      //console.log('SKIPPED'); 
      //dateTime(); 
     } 

    } 
    // reset the tweets array 
    tweets.length = 0; 
}, 4 * 1000); 

回答

1

一種簡單明瞭的方式就是添加第二個條件,你if聲明:

if (tweetTextRetweet.indexOf(bannedName) !== -1 && !tweetTextRetweet.match(/^RT|@TopU3DAssets|@LatestAssetBot|@IndieLeverage|@Parodossy|@GameArtSleuth|@Alex_TNT/)) { 

你也可以把bannedName到正則表達式,但你必須從與正則表達式構造函數的字符串構造正則表達式來做到這一點,你必須確保bannedName做不包含任何沒有正確轉義的特殊正則表達式匹配字符(這就是爲什麼我使用上面的.indexOf(),因爲它對bannedName中的正則表達式字符不敏感,所以名稱不必轉義。

假設bannedName不包含任何特殊的正則表達式字符,正則表達式可以動態建立這樣的:

var regex = new RegExp(bannedName + "|^RT|@TopU3DAssets|@LatestAssetBot|@IndieLeverage|@Parodossy|@GameArtSleuth|@Alex_TNT"); 
if (!regex.test(tweetTextRetweet)) { 

如果您需要在bannedName逃避可能的正則表達式的字符,你可以使用函數從該答案這樣做:Is there a RegExp.escape function in Javascript?


也許我首先誤解了你的問題。如果您想使用查詢中的bannedName,那麼只需將其餘代碼放入bannedName可用的函數中即可。

setInterval(function() { 

    con.query("SELECT setting,name FROM droid_settings WHERE ID = 2", function(error,rows){ 
     var bannedName = rows[0].name; 
     console.log('INFO ------- ',bannedName); 

     for (var i = 0; i < tweets.length; i++) { 
      var tweetTextRetweet = tweets[i].text; 

      if (tweetTextRetweet.indexOf(bannedName) === -1 && !tweetTextRetweet.match(/^RT|@TopU3DAssets|@LatestAssetBot|@IndieLeverage|@Parodossy|@GameArtSleuth|@Alex_TNT/)) { // search for RT and @ 
       console.log('INFO -------',tweets[i].id); 
       dateTime(); 
       console.log('INFO -------',tweets[i].text); 


       tweets.length = 0; 
      }else{ 
       //console.log('SKIPPED'); 
       //dateTime(); 
      } 

     } 
     // reset the tweets array 
     tweets.length = 0; 
    }); 

}, 4 * 1000);  
+0

肯定的,但如果我把bannedName外查詢它的undentify這就是我問 –

+0

的ReferenceError:bannedName沒有定義 –

+0

@Alex_TNT - 看看我加入到我的回答結束。 – jfriend00