javascript - 如何将未用逗号分隔的字符串拆分为具有属性的对象数组?
问题描述
我有一连串的问题和答案,如下所示:
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 方法在这些点上拆分?一旦拆分成功,我如何分配属性问题:和答案:?
解决方案
您可以使用正则表达式来匹配 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 中最后一个单词后的尾随空格不匹配)
推荐阅读
- python - 大家好,有人可以帮我解决这个问题吗
- spring-boot - Google 跟踪代码管理器 - 从后端发送 dataLayer
- postgresql - 如何在sqlalchemy中指定一个字符串主键并直接输入?
- blockchain - Solidity - 在 AAVE 上调用接口的函数
- node.js - API 调用时仅发送 1 块元数据
- autohotkey - 在 Autohotkey 中将右键单击发送到后台游戏
- database - 在 Python 数据库中使用多线程
- python - Python - 动态编程不会提高速度
- python - Python:打印小数点后两位的浮点数
- java - 使用正则表达式查找某些特殊字符