Rya*_*ite 1 javascript regex csv
给出一些csv数据,在这样的最终字段中使用未转义的逗号
1, 2, 3, 4, 5 a, b, c, d, foo bar a, b, c, d, Lorem Ipsum, dolores umbridge, something latin a, b, c, d, upcoming unescaped commas!, one, two, three, oh no!
我想要一个正则表达式匹配每行第四个逗号之后的所有逗号,这样我就可以用转义的逗号替换它们,
到目前为止,这是我可怕的尝试,它似乎只返回了第一次出现之后的最后一次出现.
^([^,]*,){4}([^,]*(,)[^,]*)*
对于某些情况
那些声称与CSV格式,如部分兼容某些格式ASS认为这是确定有转义逗号的最后一个字段,因为当标题行被解析登记字段的数量.
您可以在ASS规范中看到这一点
格式行指定SSA如何解释所有后续事件行.字段名称必须拼写正确,如下所示:
Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
最后一个字段将始终为"文本"字段,以便它可以包含逗号.
和这里
每行中的信息字段用逗号分隔.这使得在字符名称和样式名称中使用逗号是非法的(SSA阻止您在这些中使用逗号).它还可以很容易地将SSA脚本的块作为CSV文件加载到电子表格中,并删除另一个字幕程序所需的信息列.
为了能够解析这样的文件,假设你已经将数据分成"Chunks",我还需要转义最后一个字段中的所有逗号以使用某些csv-parser.
您可以匹配直到第4次出现逗号,然后使用以下方法捕获剩余的逗号:
^(?:[^,]*,){1,4}|(,)
Run Code Online (Sandbox Code Playgroud)
由于.replace()
方法接受第二个参数的回调,因此您可以在该回调中检查是否存在第一个捕获组.
JS代码:
var str = `1, 2, 3, 4, 5
a, b, c, d, foo bar
a, b, c, d, Lorem Ipsum, dolores umbridge, something latin
a, b, c, d, upcoming unescaped commas!, one, two, three, oh no!`
console.log(
str.replace(/^(?:[^,]*,){1,4}|(,)/gm, function($0, $1) {
return $1 ? '\\' + $1 : $0;
})
);
Run Code Online (Sandbox Code Playgroud)