过滤掉某些单词并仅匹配完全匹配的单词

时间:2020-07-22 16:00:44

标签: javascript arrays regex filter discord.js

我有所有股票代码的数组。当用户发布消息'TSLA will open green tomorrow.'时,我想检测单词'TSLA'。但是问题是我的代码还检测到'T''S''LA',因为它们都是有效的股票代码。

因此,我创建了一个禁止符号列表,其中包括从AZ的每个大写字母。但是我不知道如何应用。

const url = 'https://dumbstockapi.com/stock?format=tickers-only&exchange=NASDAQ,NYSE,AMEX';
const bodyArray = [];
const blockedList = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('');

request(url, (error, { statusCode }, body) => {
  return error ? console.log(error) : statusCode == 200 ? bodyArray.push(JSON.parse(body)) : 0;
});

client.on('message', msg => {
  const { content, author: { tag } } = msg;
  const [arr] = bodyArray;
  const blocked = arr.indexOf(word => content.toUpperCase().includes(word) > -1);
  if (blocked.length) {
    console.log(`${tag} used a word in list.`);
    return msg.delete().catch(console.error);
  }
});

1 个答案:

答案 0 :(得分:1)

您需要使用RegExp来匹配列表中的每个股票代码,但要使用\b边界符号来防止在匹配项中找到匹配项。

const string = 'TSLA will open green tomorrow.  LA will too.';
const symbols = ['T', 'S', 'LA', 'TSLA'];
const regExpString = String.raw`\b`+ symbols.join(String.raw`\b|\b`);
const regExp = new RegExp(regExpString, 'gi');
const matches = string.match(regExp);

console.log(matches); // [ 'TSLA', 'LA' ]

相关问题