【问题标题】:Split with Regex before sequence appears在序列出现之前用正则表达式拆分
【发布时间】:2021-11-08 17:20:05
【问题描述】:

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

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

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

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

例子:

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

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

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

【问题讨论】:

  • 试试string.match(/\w+|"[^"]*"/g)Array.from('Test, [636,13,"be738jsk","some, text",js]'.matchAll(/\w+|"([^"]*)"/g), x => x[1] ?? x[0])
  • 您的第二个解决方案完美运行。谢谢。但现在我发现,还有一些像“[Blablba] Blablba”这样的字符串。可悲的是,您的解决方案也会分裂:/所以有一个解决方案
  • Array.from("[Blablba] Blablba".matchAll(/\w+|"([^"]*)"/g), x => x[1] ?? x[0]) 显示['Blablba', 'Blablba'],难道不是预期的吗?
  • 否,因为 [Blabla] Blabla 位于两个引号之间,应该放在一起。
  • 那我的解决方案还是可以的,请看下面的代码演示答案。

标签: javascript java regex readfile to-json


【解决方案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 组值,否则,它将保留整个匹配值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2020-08-07
    • 1970-01-01
    • 2011-10-06
    • 2020-08-25
    • 1970-01-01
    相关资源
    最近更新 更多