首页 > 解决方案 > 如何将未用逗号分隔的字符串拆分为具有属性的对象数组?

问题描述

我有一连串的问题和答案,如下所示:

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

我想把它变成一个对象数组,比如:

var array = [
  {
    question: "(1) blah blah blah", 
    answer: "ANSWER: bling"
  },
  {
    question: "(2) bleh bleh bleh", 
    answer: "ANSWER: bleng"
  },
]

问题是我要拆分每个对象的位置在 (1)、(2)、(3) 等处。

我试图var array = string.split("(")尝试在每个问题编号的第一个括号中拆分对象,但“(”不是有效的拆分点。

有什么方法可以使用 .split 方法在这些点上拆分?一旦拆分成功,我如何分配属性问题:和答案:?

标签: javascriptarrayssplit

解决方案


您可以使用正则表达式来匹配 a(后跟非(字符,然后通过拆分之前的空格将每个子匹配映射到一个对象ANSWER

const string = "(1) blah blah blah ANSWER: bling (2) bleh bleh bleh ANSWER: bleng";
const arr = string
  .match(/\([^(]+\S/g)
  .map((substr) => {
    const [question, answer] = substr.split(/ (?=ANSWER)/);
    return { question, answer };
  });
console.log(arr);

\([^(]+\S

  • \(- 文字(
  • [^(]+- 一个或多个非(字符
  • \S- 非空格字符(这可确保 ANSWER 中最后一个单词后的尾随空格不匹配)

推荐阅读