【问题标题】:Find a string inside quotes in Javascript在Javascript中的引号内查找字符串
【发布时间】:2021-03-06 08:09:15
【问题描述】:

标题解释了我的问题。我正在尝试获取一个带有引号的字符串,以便可以使用 Node.js 传递到天气模块。到目前为止,这是我的代码(我尚未在此代码中设置 var CityToSearch,这是我需要帮助的) 而且是的,我正在使用 Discord.js 发送消息。

const Discord = require('discord.js')
const bot = new Discord.Client()
const PREFIX = '/';
const embed = new Discord.MessageEmbed()
const ping = require('minecraft-server-util')
const weather = require('weather-js')

bot.on('message', message => {
  if (message.channel.type === 'dm') {return}
  let args = message.content.substring(PREFIX.length).split(' ')
  if(message.content.startsWith(PREFIX))
  switch (args[0]) {
case 'weather':
if (args.includes('"')){
        var CityToSearch = 
      }
      weather.find({search: `city, ${CityToSearch}`, degreeType: 'F'}, function(err, result) {
              if(err) console.log(err);
              var currentw = new Discord.MessageEmbed()
                .setColor(0x00ffff)
                .setTitle(`Current Weather in ${args[1]} in state ${args[2]}`)
                .addField('Temperature', result[0].current.temperature)
                .addField('Sky Text', result[0].current.skytext)
                .addField('Humidity', result[0].current.humidity)
                .addField('Wind Speed & Direction', result[0].current.winddisplay)
                .addField('Feels Like', result[0].current.feelslike)
                .addField('Location', result[0].current.observationpoint)
                .addField('Time', result[0].current.observationtime)
                .addField('Date', result[0].current.date)
              message.channel.send(currentw)
            });

【问题讨论】:

  • 你能告诉我们输入的字符串吗?否则很难帮助你...
  • 这是一个示例输入字符串。代码使用args.splice(' ')按空格拼接。示例:/weather "San Fransico" California。我想让San Fransico 变成CityToSearch
  • 你能用“编辑”按钮更新问题吗?我将使用简单的正则表达式添加答案
  • 好的,我做到了。也不介意我的语法,因为我的复制和粘贴实际上已经损坏了。
  • CityToSearch 设置为'${args[1]} ${args[2]}' 有效吗?

标签: javascript node.js arrays discord discord.js


【解决方案1】:

我最初不会在空格上拆分参数。您可以使用下面的正则表达式和您的参数来抽出命令,然后根据需要解析输入:

const args = message.content.substring(PREFIX.length).match(/\/([^\s]+) (.+)/)
if (args) {  // valid input?
  const command = args[1]
  const input = args[2]

  switch (command) {
    case 'weather':
      const cityMatch = input.match(/"([^"]+)"/)
      const CityToSearch = (cityMatch) ? cityMatch[1] : input.split(/\s/)[0]
      weather.find({search: `city, ${CityToSearch}` ...)
   
    // other commands...

  }
}

【讨论】:

  • 还有其他命令,所以取出let args = message.content.substring(PREFIX.length).split(' ') 会破坏其余代码。
  • 我明白了......那么你需要描绘不同的部分。你说输入是/weather "San Fransico" California 是不是不正确?那里还有什么?我认为您可以使用正则表达式轻松完成此操作,但您需要了解输入的全部内容。
  • 例如,如果命令总是以“/”开头并且是一个单词(没有空格),那么您可以使用正则表达式来解决这个问题。关键是,你不应该在空格上分割整个东西......
  • 是的,这是输入。没有其他参数。
【解决方案2】:

您可以使用" 拆分实际字符串。这样字符串将被拆分,索引1 处的字符串将是您要查找的城市。

const str = '/weather "San Fransico" California';
console.log(str.split('"'));
console.log(str.split('"')[1]);

【讨论】:

  • 谢谢,但是代码已经用空格拼接args,所以现在它会用你提供的代码再次分割它。
  • 您可以将之前的代码更改为 let args = message.content.substring(PREFIX.length).split('"') 并在 switch(args[0]) 块中检查 case "/weather ":
  • 代码已经检查了特定的 args 作为第一个,每个都以 / 开头,其余包含一个命令。这一特定命令/weather 已经使用case 'weather' 检查天气。代码还会自动取出前缀(本例中为/
  • 或者您可以简单地使用message.content 本身进行拆分。喜欢message.content.split('"')[1]
  • 成功了,谢谢。我在天气 Node.js 模块中使用它之前对其进行了测试,当我登录 CityToSearch 时它记录了 san fransico,它等于 message.content.split('"')[1]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2022-01-10
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多