RegEx在双引号之间找到换行符并替换为空格

时间:2018-12-14 09:20:11

标签: javascript regex

我需要帮助在字符串中用双引号和中间的值替换换行符。

这是我当前的表达式,但是仅在string不包含任何其他值时才替换换行符。

/"([\r\n]*?)"/g

我要更改此内容

  • “记录多行日志字段。

    现在已解决。”

为此:

  • “日志字段有多行。现在已修复。”

3 个答案:

答案 0 :(得分:2)

要删除双引号之间的所有换行符,请在合格的双引号和结束双引号之间使这些子字符串匹配。因此,至关重要的是要知道"分隔符之间是否可以出现"个字符。

在CSV中,文字双引号通常会加倍。然后,您可以使用

var s = '"Cell1","Cell\r\n#2","""Cell #3\r\nhere\nand there"""';
s = s.replace(/"(?:""|[^"])+"/g, function(x) { return x.replace(/[^\S\r\n]*[\n\r]\s*/g, ' ');});
console.log(s);

"(?:""|[^"])+"/g正则表达式与"匹配,然后与""子字符串或除"以外的任何其他字符的1个或更多匹配项匹配,然后与"匹配。找到匹配项后,使用简单的.replace(/[^\S\r\n]*[\n\r]\s*/g, ' ')替换操作即可删除之前和之后带有0+空格的所有CR和LF符号。

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

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

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

/"[^"]+"/g

答案 1 :(得分:1)

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

/\r\n|\r|\n/g

第一种替代方法\ r \ n

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

第二种替代方法\ r

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

第三种替代方法\ n

\ n与换行符(ASCII 10)匹配

g修饰符

所有比赛(第一次比赛后不返回)

答案 2 :(得分:1)

您可以在.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(/[\n\r]\s*/g, " ");
}); 
console.log(data);

首先,它会在双引号之间查找所有内容,其次是删除换行符,然后再删除可能的连续空格。但是,该方法不适用于转义引号。