Javascript替换所有不在双引号中的逗号

时间:2019-06-09 15:15:53

标签: javascript regex replace

除双引号中的逗号外,我想用竖线('|')替换逗号分隔的字符串中的所有逗号。如果可能的话,我希望使用JavaScript的“替换”功能。

我的正则表达式知识充其量是有限的。我可以用管道替换所有逗号,但这并不能为我解析数据提供所需的结果。我还在这里找到了一个正则表达式,该正则表达式除去了引号中的所有逗号,但未实现管道或其他定界符。

(?!\B"[^"]*),(?![^"]*"\B)

这是我要完成的工作的一个示例:

string1 = 1234,Cake,,"Smith,John",,"Status: Acknowledge,Accept",,Red,,

我希望它看起来像:

string1 = 1234|Cake||"Smith,John"||"Status: Ackknowledge,Accept"||Red||

2 个答案:

答案 0 :(得分:3)

一种选择是使用replace回调分别用引号本身或管道替换引号或逗号:

str = `1234,Cake,,"Smith,John",,"Status: Acknowledge,Accept",,Red,,`;

res = str.replace(/(".*?")|,/g, (...m) => m[1] || '|');

console.log(res)

另一个(从长远来看,IMO会更好)是使用专用解析器来处理CSV数据。 CSV实际上比看起来复杂。

答案 1 :(得分:1)

我们可以使用简单的表达式(例如:

)通过交替捕获我们想要的逗号
(".+?")|(,)

Demo

RegEx电路

jex.im可视化正则表达式:

enter image description here