2

我有一个包含以下内容的文本文件:

测试,[636,13,"be738jsk","some, text",js]

我想将此内容读入一个数组。我目前使用带有正则表达式的 JavaScript 将子字符串直接拆分为数组。作为正则表达式,我有: line.split(/,\s\[|",|,"|","/);

问题是,我有一些句子,如示例中带有“,”的句子,我不想在那里拆分。所以我试图在正则表达式中说,“之后拆分,除空格之外的所有内容”。问题是,它还删除了 , 之后的“一切”

例子:

测试,[63737,33,"bla,blablba",737]

当我使用这个正则表达式时:

Line.split(/,"|,\s\[|",|,[^\s]/); 然后它从 33 中删除了 3 :(

4

1 回答 1

1

您可以使用

const text = 'Test, [636,13,"be738jsk","some, text",js], "[Blablba] Blablba"';
console.log(
  Array.from(text.matchAll(/\w+|"([^"]*)"/g), x => x[1] ?? x[0])
)

输出:

[
  "Test",
  "636",
  "13",
  "be738jsk",
  "some, text",
  "js",
  "[Blablba] Blablba"
]

在这里,\w+|"([^"]*)"匹配双引号之间的一个或多个单词字符或任何零个或多个字符,而不是双引号(捕获到第 1 组)。如果定义,该x => x[1] ?? x[0]部分将采用第 1 组值,否则,它将保留整个匹配值。

于 2021-09-13T12:26:39.163 回答