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

如何将带编号的问答字符串转为含question/answer的对象数组?

当然可以用split()方法实现!结合正则表达式就能轻松搞定这个需求,我给你一步步拆解怎么做:

核心思路

我们需要分两步拆分:

  1. 先把整个字符串按(1)、(2)这类编号开头的规则拆分成独立的问答块;
  2. 再把每个问答块拆成问题和答案两部分,最后组装成目标对象数组。

具体实现代码

const string = "(1) blah blah blah ANSWER: bling (2) bleh bleh bleh ANSWER: bleng";

// 第一步:拆分出每个独立的问答单元
// 用正向预查正则,确保在"(数字)"前面的位置拆分,不会丢失编号
const questionChunks = string.split(/(?=\(\d+\))/).filter(chunk => chunk.trim() !== '');

// 第二步:将每个问答单元转换为对象
const resultArray = questionChunks.map(chunk => {
  // 按" ANSWER:"拆分问题和答案部分(注意前面的空格,避免误匹配内容里的ANSWER)
  const [questionText, answerText] = chunk.split(/\sANSWER:/);
  return {
    question: questionText.trim(),
    answer: `ANSWER: ${answerText.trim()}`
  };
});

console.log(resultArray);
// 输出结果就是你要的对象数组:
// [
//   { question: "(1) blah blah blah", answer: "ANSWER: bling" },
//   { question: "(2) bleh bleh bleh", answer: "ANSWER: bleng" }
// ]

关键细节解释

  • 拆分问答块的正则/(?=\(\d+\))/:这里用了正向预查((?=...)),它会匹配后面紧跟着(数字)的位置,但不会消耗这些字符。这样拆分出来的每个chunk都会完整保留(1)、(2)这类编号开头,不会像直接用split("(")那样把编号拆碎。
  • 过滤空字符串:filter(chunk => chunk.trim() !== '')是为了处理原始字符串开头可能出现的空元素(比如如果字符串开头刚好是拆分位置的话)。
  • 拆分问题和答案:用/\sANSWER:/作为分隔符,确保只拆分作为答案标识的ANSWER:(前面带空格),避免误拆问题内容里可能出现的ANSWER字样。拆分后记得补回ANSWER:前缀,因为split()会把分隔符本身去掉。

如果你的实际场景里ANSWER:前面可能没有空格,只要把拆分正则改成/(?=ANSWER:)/就可以了,灵活调整就行~

内容的提问来源于stack exchange,提问作者Hello World

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:03:13