You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord.js机器人参数解析需求:保留引号内完整参数

解决Discord.js中带引号的参数解析问题

我懂你现在的困扰——原来的空格拆分逻辑会把引号里的内容也拆得七零八落,完全不符合预期。这里给你一个简洁高效的解决方案,用正则表达式实现支持引号的参数解析:

核心代码替换

把你原来的参数拆分代码,替换成下面这段:

// 替换原有的args定义行
const args = message.content.slice(prefix.length).match(/"([^"]*)"|(\S+)/g)?.map(match => {
  // 识别当前匹配项是否是带引号的内容
  const quotedMatch = match.match(/"([^"]*)"/);
  // 是带引号的就返回引号内的文本,否则直接返回原参数
  return quotedMatch ? quotedMatch[1] : match;
}) || [];

代码逻辑解释

  1. 正则表达式"([^"]*)"|(\S+):

    • "([^"]*)":匹配被双引号包裹的内容,捕获组会提取出引号内的实际文本(不包含引号)
    • |:逻辑“或”,匹配两种参数格式之一
    • (\S+):匹配连续的非空白字符,也就是不带引号的普通参数
    • g:全局匹配,找出所有符合条件的参数
  2. .map()处理匹配结果:
    因为match返回的是带引号的完整字符串(比如"foo1 bar1"),所以我们需要遍历每个匹配项,把引号里的内容单独提取出来,不带引号的参数则直接保留。

实际效果测试

当你输入!give "foo1 bar1" 50 "foo2 bar2"时,args数组会变成:
['foo1 bar1', '50', 'foo2 bar2'],完全符合你的需求。

补充说明

如果遇到未闭合的引号(比如!give "foo bar 50),这个正则会把"foo bar当成一个参数。如果你需要严格校验引号是否闭合,可以在解析后加个简单检查,比如判断参数里是否包含未闭合的引号,再给用户返回提示。

内容的提问来源于stack exchange,提问作者Wassim Tahraoui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:03:10