【发布时间】:2020-02-10 18:11:23
【问题描述】:
我正在制作一个问题数据库,我制作数据库的方法是将一个字符串拆分为一个较小的字符串数组,其中每个字符串都是一个问题及其答案。例如,我的字符串看起来像
var string = "(1) foo? ANSWER: fee (2) fah. ANSWER: feh"
我将字符串拆分为数组的方式是使用以下.match:
const arr = string
.match(/\(\d+[^(]+/g)
});
.match 中的正则表达式将大问题字符串拆分为字符串数组。现在的方式是,匹配从问题编号的左括号开始,匹配所有内容,直到下一个左括号,即下一个问题编号的开头。所以结果数组看起来像
["(1) foo? ANSWER: fee", "(2) fah. ANSWER: feh"]
这很好用,除非问题本身有括号:
var string = "(1) foo foo (faa) foo? ANSWER: fee (2) fah. ANSWER: fah"
在这种情况下,.match 函数在 ( in (faa ) 处进行拆分,这会抛出数组。我如何修改正则表达式,使其匹配一个左括号,后跟无限数量的非括号字符,但只要后面跟着一个非数字字符就匹配括号?
【问题讨论】:
-
为什么要解析字符串而不是一开始就将数据存储在对象和数组中?
-
const questions = [{ "q":"foo foo (faa)","a":"fee"}, {"q":"fah?","a":"fah!"}]可以存储在 JSON.stringify 之后并使用 JSON.parse 读取(或者只是 ajax 作为 JSON) -
是的,我知道这样更实用。问题是,我正在复制粘贴数千个问题(不是我写的),而且我没有时间将每个问题都放入具有属性的对象中。我的目标是提取大量问题,将其解析为问题字符串及其答案,然后将这些子字符串转换为对象。
标签: javascript regex string match