在序列出现之前用正则表达式拆分
Split with Regex before sequence appears
我有一个包含以下内容的文本文件:
测试,[636,13,"be738jsk","some, text",js]
我想将此内容读入数组。我目前使用 JavaScript 和正则表达式将子字符串直接拆分成数组。
作为正则表达式,我有:
line.split(/,\s\[|",|,"|","/);
问题是,我有一些句子,例如示例中带有“,”的句子,我不想在那里拆分。所以我试图在正则表达式中说,“拆分之后,除空格外的所有内容”。问题是,它还删除了 ,
之后的“所有内容”
示例:
测试,[63737,33,"bla,blablba",737]
当我使用这个正则表达式时:
Line.split(/,"|,\s\[|",|,[^\s]/);
然后它从 33 中切出 3 :(
您可以使用
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 组值,否则,它保留整个匹配值。
我有一个包含以下内容的文本文件:
测试,[636,13,"be738jsk","some, text",js]
我想将此内容读入数组。我目前使用 JavaScript 和正则表达式将子字符串直接拆分成数组。
作为正则表达式,我有:
line.split(/,\s\[|",|,"|","/);
问题是,我有一些句子,例如示例中带有“,”的句子,我不想在那里拆分。所以我试图在正则表达式中说,“拆分之后,除空格外的所有内容”。问题是,它还删除了 ,
之后的“所有内容”示例:
测试,[63737,33,"bla,blablba",737]
当我使用这个正则表达式时:
Line.split(/,"|,\s\[|",|,[^\s]/);
然后它从 33 中切出 3 :(
您可以使用
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 组值,否则,它保留整个匹配值。