正则表达式只匹配较大字符串

时间:2018-03-13 16:55:14

标签: javascript regex csv

我有一个大型CSV文件,我想找到一个能够删除引号内所有新行的正则表达式。

a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,"c
123",d123,
a123,b123,c123,d123,
"a
123",b123,c123,d123,
a123,b123,c123,"d
1
2
3",
a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,c123,d123

在这个例子中,我有多行,其中引号中有一个新行,甚至还有一行有多个新行。我需要删除所有这些新行,前提是它们在引号内。这可能吗?

预期结果:

a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,"c123",d123,
a123,b123,c123,d123,
"a123",b123,c123,d123,
a123,b123,c123,"d123",
a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,c123,d123

Node.js代码:

var request = require('request')

request.post({
    url: '...',
}, function (error, response, body) {
    var formatted = body.replace(/.../g, '<#>')
})

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式匹配引号之间的内容,然后遍历这些匹配并将每个匹配替换为没有换行符的版本......

let str = `a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,"c
123",d123,
a123,b123,c123,d123,
"a
123",b123,c123,d123,
a123,b123,c123,"d
1
2
3",
a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,c123,d123`;

const matches = str.match(/"[^"]+"/g);

matches.forEach(m => str = str.replace(m, m.replace(/[\r\n]/g, "")));

console.log(str);

Chrome控制台输出:

a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,"c123",d123,
a123,b123,c123,d123,
"a123",b123,c123,d123,
a123,b123,c123,"d123",
a123,b123,c123,d123,
a123,b123,c123,d123,
a123,b123,c123,d123

您的Node.js代码如下:

var request = require('request')

request.post({
    url: '...',
}, function (error, response, body) {
    let formatted = body;
    const matches = body.match(/"[^"]+"/g);
    matches.forEach(m => formatted = formatted.replace(m, m.replace(/[\r\n]/g, "")));
    console.log(formatted);
})
相关问题