RegEx найти новую строку между двойными кавычками и заменить на пробел - PullRequest
0 голосов
/ 14 декабря 2018

Мне нужна помощь для замены новой строки пробелом в строке с двойными кавычками и значением между.

Это мое текущее выражение, но оно заменяет только новую строку, если строка не содержит никакого другого значения.

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

Я хочу изменить это:

  • "Поле журнала с несколькими строками.

    Теперь это исправлено."

Для этого:

  • "Поле журнала с несколькими строками. Теперь это исправлено."

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Чтобы удалить все фрагменты символов разрыва строки между двойными кавычками, необходимо сопоставить эти подстроки между подходящими начальными и конечными двойными кавычками.Таким образом, крайне важно знать, могут ли символы " быть экранированными между разделителями ".

В 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 или более вхождений подстроки "" или любому символу, отличному от ", а затем ",Когда совпадение найдено, все символы CR и LF с любыми пробелами 0+ до и после них удаляются с помощью простой операции .replace(/[^\S\r\n]*[\n\r]\s*/g, ' ') replace.

Если буквальные двойные кавычки экранируются обратной косой чертой, выможет использовать

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

Если вы уверены, что двойные кавычки не экранированы, используйте

/"[^"]+"/g
0 голосов
/ 14 декабря 2018

Вы можете использовать функцию в .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);

Во-первых, он ищет все, что угодно, кроме кавычек с двойными именами, а второе - удаляет символы новой строки и возможные последовательные пробелы после этого.Подход не будет работать с экранированными кавычками.

0 голосов
/ 14 декабря 2018

Это должно решить вашу проблему:

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

1-й вариант \ r \ n

\ r соответствует возврату каретки (ASCII 13) \ n соответствует aсимвол перевода строки (новая строка) (ASCII 10)

2-й вариант \ r

\ r соответствует возврату каретки (ASCII 13)

3-й вариант \ n

\ n соответствует символу перевода строки (новая строка) (ASCII 10)

g модификатор

Все матчи (не возвращаются после первого матча)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...