我试图以设定的间隔从数据库单词查询并将它们与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);
答案 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);