littleBitsman
littleBitsman

Reputation: 109

Find a string inside quotes in Javascript

The title explains my problem. I am trying to get a string that has quotation marks around it so I can use Node.js to pass into a weather module. Here's my code so far (I have not set the var CityToSearch yet in this code which is what I need help with) And also yes I'm using Discord.js to send messages.

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)
            });

Upvotes: 2

Views: 661

Answers (2)

Jordan Kasper
Jordan Kasper

Reputation: 13273

I would NOT split the arguments on spaces initially. You can use the Regular Expression below with your arguments to yank out the command, and then parse the inputs as needed:

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...

  }
}

Upvotes: 1

theWellHopeErr
theWellHopeErr

Reputation: 1872

You can split the actual string with ". So that the string will be split and the string at index 1 will be the city you are looking for.

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

Upvotes: 1

Related Questions