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

JavaScript新手求助:如何将问答字符串转换为指定结构的数组?

解决方法

可以通过正则拆分字符串+数组遍历配对来实现需求,具体步骤如下:

1. 拆分问答字符串为对应数组

利用正则的正向预查特性,把以数字.开头的内容拆分出来,再清理掉多余的序号和空格:

const questions = "1.What is love? 2.1+1 = ? 3. 2+2 = ?";
const answers = "1.Yes 2.2 3.4";

// 拆分问题数组
const questionList = questions
  .split(/(?=\d+\.)/) // 匹配数字.的位置,在其前方分割
  .filter(item => item.trim()) // 过滤空字符串
  .map(item => item.replace(/^\d+\.\s*/, "").trim()); // 去掉开头的数字.和空格,清理前后空白

// 拆分答案数组
const answerList = answers
  .split(/(?=\d+\.)/)
  .filter(item => item.trim())
  .map(item => item.replace(/^\d+\.\s*/, "").trim());

执行后questionList会得到:["What is love?", "1+1 = ?", "2+2 = ?"],answerList得到:["Yes", "2", "4"]

2. 配对生成目标数组

遍历两个数组,将每一组问答封装为对象,再存入数组:

const package = questionList.map((question, index) => {
  const key = `question${index + 1}`;
  return { [key]: answerList[index] };
});

console.log(package);
// 输出:[{question1: "Yes"}, {question2: "2"}, {question3: "4"}]

补充说明

  • 正则/(?=\d+\.)是正向预查,意思是"找到后面跟着数字+点的位置",这样拆分不会吃掉序号本身,方便后续清理。
  • 用map遍历的时候,通过计算index+1来生成question1这类带序号的键名,用方括号[key]来实现动态对象键名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 13:20:55