gpt4 book ai didi

javascript - 正则表达式匹配 n 次出现后的每次出现

转载 作者:行者123 更新时间:2023-11-30 06:57:12 25 4
gpt4 key购买 nike

给定一些 csv 数据,像这样在最终字段中使用未转义的逗号

1, 2, 3, 4, 5a, b, c, d, foo bara, b, c, d, Lorem Ipsum, dolores umbridge, something latina, b, c, d, upcoming unescaped commas!, one, two, three, oh no!

我想要一个正则表达式来匹配每行第 4 个逗号之后的所有逗号,这样我就可以用转义逗号\, 替换它们

到目前为止,这是我糟糕的尝试,它似乎只返回前 n 次出现后的最后一次出现。

^([^,]*,){4}([^,]*(,)[^,]*)*

对于某些上下文

一些声称与 csv 格式部分兼容的格式,例如 ASS假设在last 字段中使用未转义 逗号是可以的,因为字段数是在解析标题行时注册的。

你可以在 ASS 规范中看到这一点

The format line specifies how SSA will interpret all following Event lines. The field names must be spelled correctly, and are as follows: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text The last field will always be the Text field, so that it can contain commas.

在这里

The information fields in each line are separated by a commas. This makes it illegal to use commas in character names and style names (SSA prevents you putting commas in these). It also makes it quite easy to load chunks of an SSA script into a spreadsheet as a CSV file, and chop out columns of information you need for another subtitling program.

为了能够像这样解析文件,假设您已经将数据分成“ block ”,我还需要转义最后一个字段中的所有逗号以处理某些 csv-parser

最佳答案

您可以匹配到第 4 次出现的逗号,然后使用以下命令捕获剩余的逗号:

^(?:[^,]*,){1,4}|(,)

由于 .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;
})
);

关于javascript - 正则表达式匹配 n 次出现后的每次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50397373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com