正则表达式替换在引号之间输入

时间:2016-06-07 09:13:59

标签: javascript regex

如何替换文本文件中两个引号之间的所有输入。第一个引号始终以制表符开头,或者它是行中的第一个字符(csv文件)。我尝试了以下正则表达式

/(\t"|^")([^"]*)(\n)([^"]*")/gm

但是这个正则表达式只匹配两个引号之间的第一个输入,而不是全部。

例如,以下文字:

xx "xx 
xx 
xx" 
xx 
"xx"
xx 
xx
"xxx xxx 
xx"

应该成为

xx "xx xx xx" 
xx 
"xx"
xx 
xx
"xxx xxx xx"

我看过以下帖子( javascript regex replace spaces between brackets)非常相似,但正则表达式建议在我的情况下不可用。

2 个答案:

答案 0 :(得分:9)

使用Javascript替换,您可以use a function as replacement

var str = 'foo \n"a\n" bar\n';

str = str.replace(/"[^"]+"/g, function(m) {
 return m.replace(/\n/g, ' ');
});

console.log(str);

正则表达式"[^"]+"会将引用的内容与之间的一个或多个non引号匹配。

根据需要添加标签或开头等条件:(?:\t|^)"[^"]+"

答案 1 :(得分:2)

\n(?=[^"]*"(?:[^"]*"[^"]*")*[^"]*$)

您可以使用此功能并替换为empty string

See Demo

var re = /\n(?=[^"]*"(?:[^"]*"[^"]*")*[^"]*$)/g; 
var str = 'xx "xx \nxx \nxx" \nxx \n"xx"\nxx \nxx\n"xxx xxx \nxx"';
var subst = ''; 

var result = str.replace(re, subst);