我需要帮助在字符串中用双引号和中间的值替换换行符。
这是我当前的表达式,但是仅在string不包含任何其他值时才替换换行符。
/"([\r\n]*?)"/g
我要更改此内容
“记录多行日志字段。
现在已解决。”
为此:
答案 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);
首先,它会在双引号之间查找所有内容,其次是删除换行符,然后再删除可能的连续空格。但是,该方法不适用于转义引号。