我有一个非常具体的问题,我需要在每次出现双引号时替换逗号(并同时删除双引号)。
尝试了sime regex模式,但失败了。
Ex输入:qq22,abc123,“ 1,200”,aaa
Ex输出:qq22,abc123、1200,aaa
需要先删除附带的逗号,然后再删除双引号。
感谢阅读。
答案 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