RegEx在双引号之间查找换行符并用空格替换



我需要帮助将换行符替换为带双引号的字符串中的空格和值。

这是我当前的表达式,但只有当字符串不包含任何其他值时,它才会替换换行符。

/"([rn]*?)"/g

我想改变这个:

  • "具有多行的日志字段。

    现在已修复。">

为此:

  • "用多行记录字段。现在已修复。">

要删除双引号之间的所有换行字符块,需要在符合条件的开始和结束双引号之间匹配这些子字符串。因此,了解"字符是否可以在"分隔符之间转义是至关重要的。

在CSV中,文本双引号通常是双引号。然后,您可以使用

var s = '"Cell1","Cellrn#2","""Cell #3rnherenand there"""';
s = s.replace(/"(?:""|[^"])+"/g, function(x) { return x.replace(/[^Srn]*[nr]s*/g, ' ');});
console.log(s);

"(?:""|[^"])+"/g正则表达式匹配一个",然后匹配一个或多个""子字符串或除"以外的任何字符,然后匹配"。当找到匹配时,使用简单的.replace(/[^Srn]*[nr]s*/g, ' ')替换操作来移除之前和之后具有任何0+空白的所有CR和LF符号。

如果文字双引号用反斜杠转义,则可以使用

/"[^"\]*(?:\[sS][^"\]*)*"/g

如果您确定没有转义的双引号,请使用

/"[^"]+"/g

您可以在.replace()中使用这样的函数:

var data = `
I need help to replace a newline with space in a string with double quotes and value between.
This is my current expression but it's only replace newline if string doesn't contain any other value.
I want to change this:
"Log field with multiple lines.
This is now fixed."
For this:
"Log field with multiple lines. This is now fixed."
`;
var regex = /"[^"]*"/g;
data = data.replace(regex, function (match, capture) { 
return match.replace(/[nr]s*/g, " ");
}); 
console.log(data);

首先,它查找dobule引号之间的任何内容,其次是删除换行符和可能的连续空格。不过,这种方法不适用于转义引号。

这应该可以解决您的问题:

/rn|r|n/g

第一个备选方案\r\n

\r与回车符匹配(ASCII 13(\n匹配换行符(换行(字符(ASCII 10(

第二个备选方案\r

\r与回车符(ASCII 13(匹配

第三种选择\n

\n匹配换行符(换行(字符(ASCII 10(

g调节剂

所有比赛(第一场比赛后不返回(

最新更新