亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將帶有嵌套引號的命令字符串解析為參數和標志

將帶有嵌套引號的命令字符串解析為參數和標志

jeck貓 2023-07-29 15:24:05
我正在嘗試為 Discord 機器人創建一個命令解析器,以便在收到消息時使用,但我在處理嵌套引號時遇到問題。我已經做到了,它可以解析帶有雙引號和標志的字符串,但它不處理嵌套引號。這是我的要求:處理雙引號。處理嵌套雙引號。處理標志(可以位于 后的任何位置!command)。沒有指定值的標志默認值為true/ 1。例如,以下字符串:!command that --can "handle double" quotes "and \"nested double\" quotes" --as --well=as --flags="with values"...應該產生以下參數:command、that、handle double、quotes和and "nested double" quotes以下標志:"can": true、"as": true、"well": "as"、"flags": "with values"。這是我到目前為止所擁有的:// splits up the string into separate arguments and flagsconst parts = content.slice(1).trim().match(/(--\w+=)?"[^"]*"|[^ "]+/g)  .map(arg => arg.replace(/^"(.*)"$/, '$1'));// separates the arguments and flagsconst [ args, flags ] = parts.reduce((parts, part) => {  // check if flag or argument  if (part.startsWith('--')) {    // check if has a specified value or not    if (part.includes('=')) {      // parses the specified value      part = part.split('=');      const value = part.slice(1)[0];      parts[1][part[0].slice(2)] = value.replace(/^"(.*)"$/, '$1');    } else {      parts[1][part.slice(2)] = true;    }  } else {    parts[0].push(part);  }  return parts;}, [[], {}]);當前解析為以下參數:、command、that、handle double、quotes、and \、nested和以下標志:、、、。double\ quotes"can": true"as": true"well": "as""flags": "with values"
查看完整描述

1 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

我修改了第一個正則表達式以允許\"在引號值的中間。以下行:

const parts = content.slice(1).trim().match(/(--\w+=)?"[^"]*"|[^ "]+/g)

...變成:

const parts = content.slice(1).trim().match(/(--\S+=)?"(\\"|[^"])*"|[^ "]+/g)

修改

  • "[^"]*"部分已更改為"(\\"|[^"])*"允許\"驗證,防止引用的值被前面帶有反斜杠的引號終止。

  • 我將\win更改(--\w+=)?\Sresult in(--\S+=)?以允許驗證更多字母。


查看完整回答
反對 回復 2023-07-29
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號