第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

金|Node.js - 將字符串劃分為考慮引號(hào)的參數(shù)

金|Node.js - 將字符串劃分為考慮引號(hào)的參數(shù)

桃花長(zhǎng)相依 2022-09-16 21:59:52
我正在編寫一個(gè)不和諧的機(jī)器人。Discord是一個(gè)帶有聊天功能的社交平臺(tái),您可以在那里編寫機(jī)器人代碼。為了觸發(fā)機(jī)器人命令,機(jī)器人會(huì)讀取發(fā)送到聊天的每條消息。它以繩子的形式發(fā)送給他。通過使用這個(gè):機(jī)器人將每個(gè)單詞分離成一個(gè)數(shù)組?,F(xiàn)在,我可以這樣做:var args = msg.content.split(' ');if (args[0] === '!command') { //code }我的機(jī)器人將跟蹤英雄聯(lián)盟玩家。我希望能夠輸入名稱并添加跟蹤原因。所有這些都將進(jìn)入數(shù)據(jù)庫(kù)。起初,這似乎很簡(jiǎn)單,我可以這樣做:if (args[0] === '!command') {  var player = args[1];  var reason = args[2];}現(xiàn)在,如果我發(fā)送機(jī)器人將正確。!command player1 reasons問題是,在英雄聯(lián)盟中,允許在昵稱中使用空格。同時(shí),原因只有一個(gè)詞可能不足。如果你試圖這樣做:機(jī)器人不會(huì)得到作為args[1],而是,將是args[1],并且將是args[2]。同時(shí),現(xiàn)在將是參數(shù)[3]而不是參數(shù)[2]。!command "player one" reasonsplayer one"playerone"reasons有沒有一種簡(jiǎn)單的方法來告訴javascript忽略引號(hào)內(nèi)的空格,這樣它就不會(huì)在那里拆分字符串?我可以使用不同的字符來拆分字符串,但是編寫這樣的命令感覺很奇怪,并且是補(bǔ)丁而不是實(shí)際的解決方案。!command-player-reasons there
查看完整描述

4 回答

?
森林海

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊

更新:

因?yàn)镺P似乎對(duì)語言不是很有經(jīng)驗(yàn),所以我選擇提供一個(gè)易于閱讀的答案。正確的方法是使用正則表達(dá)式捕獲組:https://stackoverflow.com/a/18647776/16805283


這將檢查“message.content”中是否有任何引號(hào),并更改獲取 args 數(shù)組的方式。如果未找到引號(hào),它將回退到您自己的代碼以生成 args 數(shù)組。請(qǐng)記住,這只有在“message.content”上正好有2個(gè)**引號(hào)時(shí)才有效,因此不應(yīng)在原因中使用引號(hào)

// Fake message object as an example

const message = {

  content: '!command "Player name with a lot of spaces" reason1 reason2 reason3'

};


const { content } = message; 

let args = [];

if (content.indexOf('"') >= 0) {

  // Command

  args.push(content.slice(0, content.indexOf(' ')));

  // Playername

  args.push(content.slice(content.indexOf('"'), content.lastIndexOf('"') + 1));

  // Reasons

  args.push(content.slice(content.lastIndexOf('"') + 2, content.length));

} else {

  args = content.split(' ');

}

// More code using args

如果你想要不帶引號(hào)的玩家名稱:


playerName = args[1].replace(/"/g, '');`


查看完整回答
反對(duì) 回復(fù) 2022-09-16
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

你可以在這里使用正則表達(dá)式:


const s = `!command "player one" some reason`;


function getArgsFromMsg1(s) {

  const args = []

  if ((/^!command/).test(s)) {

    args.push(s.match(/"(.*)"/g)[0].replace(/\"/g, ''))

    args.push(s.split(`" `).pop())

    return args

  } else {

    return 'not a command'

  }


}


// more elegant, but may not work

function getArgsFromMsg2(s) {

  const args = []

  if ((/^!command/).test(s)) {

    args.push(...s.match(/(?<=")(.*)(?=")/g))

    args.push(s.split(`" `).pop())

    return args

  } else {

    return 'not a command'

  }

}


console.log(getArgsFromMsg1(s));

console.log(getArgsFromMsg2(s));


查看完整回答
反對(duì) 回復(fù) 2022-09-16
?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊

我建議你單獨(dú)解析命令和它的參數(shù)。它將承認(rèn)編寫更靈活的命令。例如:


var command = msg.content.substring(0, msg.content.indexOf(' '));

var command_args_str = msg.content.substring(msg.content.indexOf(' ') + 1);

switch(command) {

    case '!command':

        var player = command_args_str.substring(0, command_args_str.lastIndexOf(' '));

        var reason = command_args_str.substring(command_args_str.lastIndexOf(' ') + 1);

        break;

}


查看完整回答
反對(duì) 回復(fù) 2022-09-16
?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊

這是可能的,但對(duì)于機(jī)器人的用戶來說,只使用不同的字符來拆分兩個(gè)參數(shù)可能不那么復(fù)雜。


例如 如果您知道(或 ,等)不是有效用戶名的一部分。!command player one, reasons,|=>


如果您只支持用戶名部分的引號(hào),則更容易:


const command = `!command`;

const msg1 = {content: `${command} "player one" reasons ggg`};

const msg2 = {content: `${command} player reasons asdf asdf`};


function parse({content}) {

  if (!content.startsWith(command)) {

    return; // Something else

  }

  content = content.replace(command, '').trim();

  const quotedStuff = content.match(/"(.*?)"/);

  if (quotedStuff) {

    return {player: quotedStuff[1], reason: content.split(`"`).reverse()[0].trim()};

  } else {

    const parts = content.split(' ');

    return {player: parts[0], reason: parts.slice(1).join(' ')};

  }

  console.log(args);

}


[msg1, msg2].forEach(m => console.log(parse(m)));


查看完整回答
反對(duì) 回復(fù) 2022-09-16
  • 4 回答
  • 0 關(guān)注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)