【问题标题】:How can I match a word inside of a string to word in a list EXACTLY?如何将字符串中的单词与列表中的单词完全匹配?
【发布时间】:2019-07-22 03:29:00
【问题描述】:

这几天我一直在玩口袋妖怪 API。

我有一个列出所有口袋妖怪的数组,并且有一个看起来像这样的字符串 ''

我想检查这个字符串,对照一个数组并得到那个确切的名字

我的问题是我还得到了会被包含在内的东西,比如 pidgeot。

如何将数组与字符串完全匹配并且只记录一个名称?

let pokemonArray = ["pidgeot", "pidgeotto", "charizard", "goldeen"];

let y = '<@user_id> pidgeotto';

function handleMessage(message) {
  for (let i = 0; i <= message.length; i++) {
    if (y.includes(message[i])) {
      console.log(message[i])
    }
  }
}

handleMessage(pokemonArray);

没有错误,只是没有得到我想要的结果。

【问题讨论】:

  • 您可以使用== 运算符来代替includes。如果字母大小写不同,您可以在比较之前转换为相同的大小写。
  • if(new RegExp('\\b' + message[i] + '\\b', "i").test(y)) { }
  • @adiga 如果用户可以控制消息,那是不安全的。他们可能在消息的末尾有|.*,或者他们可以通过导致灾难性的回溯来执行 ReDOS 攻击
  • @Paulpro 副本也有一个 escapeRegExp 方法。

标签: javascript node.js


【解决方案1】:

在空格处拆分y字符串,并使用===比较查看第二部分是否准确

let pokemonArray = ["pidgeot", "pidgeotto", "charizard", "goldeen"];

let y = '<@user_id> pidgeotto';
let yName = y.split(' ')[1];

function handleMessage(message) {
  for (let i = 0; i <= message.length; i++) {
    if (message[i] === yName ) {
      console.log(message[i])
    }
  }
}

handleMessage(pokemonArray);

【讨论】:

    【解决方案2】:

    你可以通过这种方式来避免 PokemonArray 中的第一个元素

    let pokemonArray = ["pidgeot", "pidgeotto", "charizard", "goldeen"];
    
    let y = '<@user_id> pidgeotto';
    
    function handleMessage(message) {
        for(let i = 0; i <= message.length; i++) {
            let splitedY = y.split(message[i])
            if(splitedY.length > 1 && splitedY[1] !== "") {
               console.log(message[i])
            }
        }
    }
    
    handleMessage(pokemonArray);

    【讨论】:

      【解决方案3】:

      这是唯一的衬里:

      const match = pokemonArray.find(pokemon => new RegExp(`\\b${pokemon}\\b`, `i`).test(y));
      

      只需使用数组查找方法并使用正则表达式匹配您的字符串。 希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 2020-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多