NodeJS删除csv中用双引号引起来的逗号

时间:2019-03-01 15:20:40

标签: javascript csv comma

我有一个非常具体的问题,我需要在每次出现双引号时替换逗号(并同时删除双引号)。

尝试了sime regex模式,但失败了。

Ex输入:qq22,abc123,“ 1,200”,aaa

Ex输出:qq22,abc123、1200,aaa

需要先删除附带的逗号,然后再删除双引号。

感谢阅读。

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式来做到这一点。

在Regex 101上,https://regex101.com/r/gJ0zVK/1/可以在右侧面板中看到说明。 基本上,我们正在寻找一个以引号开头的字符串,其内容直到逗号为止,然后才内容直到另一个引号为止。 然后,您只需将所有内容替换为捕获的组(不带逗号)

function removeCommaAndQuotes(str) {
  const regex = /"([^",]+),([^",]+)"/gm;
  while (regex.test(str)) {
    str = str.replace(regex, '$1$2')
  }

  return str;
}


let str = 'qq22, abc123, "1,200", aaa';
removeCommaAndQuotes(str);

答案 1 :(得分:0)

该正则表达式如何:const regex = /(.*)(".*")(.*)/

它将匹配3组。 对于您的示例字符串(qq22, abc123, "1,200", aaa),它将返回以下组:

  • qq22, abc123,
  • "1,200"
  • , aaa

然后,您将获得第二组并替换所有逗号。假设您从正则表达式检查匹配中命名了变量,则代码看起来像这样:

match[1] = match[1].replace(/,/g, '');

g代表全局,这意味着它将替换所有出现的事件。您也可以为"执行此操作-我想您也可以在/,|"/g这样的正则表达式中执行此操作。 然后,您必须将所有三个组放在一起:

const result = match[0] + match[1] + match[2]

,它应该为您提供编辑后的版本。 这有点脏,我建议您使用csv解析器,如答案注释中所述

答案 2 :(得分:0)

您可以使用两个正则表达式在行中找到引号,然后找到替换部分(逗号和引号):

let row = 'qq22, abc123, "1,200", aaa';
const findQuoteRegex = /".*"/;
const replaceCommaAndQuoteRegex = /"([^",]+),([^",]+)"/gm;

while (row.match(findQuoteRegex)) {
    row = row.replace(replaceCommaAndQuoteRegex, '$1$2');
}

console.log(row);
// output qq22, abc123, 1200, aaa
相关问题