正则表达式,将每个CSV字段都用双引号引起来

时间:2018-10-03 15:00:43

标签: javascript regex csv

使用正则表达式,我找不到将csv文本中的每个字段都包装在双引号中的解决方案。 问题在于可能已经有双引号字段了。

示例:

Country;Product Family;Product SKU;Commercial Status
Germany;Aprobil;"Apro&'bil_1_5 mL";Actively Marketed

应该是

"Country";"Product Family";"Product SKU";"Commercial Status"
"Germany";"Aprobil";"Apro&'bil_1_5 mL";"Actively Marketed"

基本上,我在正则表达式中遇到两个逻辑部分时遇到问题...

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为您需要进行2次替换,第一个正则表达式如下:

/([\w ]+[^;\n]*|\"[^\"]*\")/g

正则表达式将匹配:

  1. 任何Word字符或Space,重复1次或更多次,后跟任何不是半冒号';'或newline的字符,任意数量的时间。

  2. 双引号quote,其后任意字符不是双引号,以任意次数结束,以双引号结束。

然后,您将匹配项替换为:\"\1\"

最后,您将2个双引号替换为一个双引号。

在JavaScript中,这是:

var test = 'Country;Product Family;Product SKU;Commercial Status\n'
    + 'Germany;Aprobil;"Apro&'bil_1_5 mL";Actively Marketed\n';

var regex = /([\w ]+[^;\n]*|\"[^\"]*\")/g;

test = test.replace(regex, '\"\1\"'); // wrap in double quotes
test = test.replace(/\"\"/g, '\"'); // replace 2 quotes with one

现在您应该拥有想要的东西。