从查询更新禁止的单词字符串以匹配

时间:2015-10-31 16:15:16

标签: javascript node.js node-mysql

我试图以设定的间隔从数据库单词查询并将它们与Twitter API匹配,我无法弄清楚如何变量

var bannedName = rows[0].name;

进入这个表达式,现在只是放置bannedName变量会导致识别

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 个答案:

答案 0 :(得分: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);