NodeJS удаляет запятую с двойными кавычками в CSV - PullRequest
0 голосов
/ 01 марта 2019

У меня очень специфическая проблема, мне нужно заменять запятую в двойных кавычках каждый раз, когда она появляется (и также удалять двойные кавычки).

Пробовал шаблоны регулярных выражений sime, но не смог.

Ex Входные данные: qq22, abc123, «1200», aaa

Ex Выходные данные: qq22, abc123, 1200, aaa

Сначала необходимо удалить запятую, а затем удалить двойные кавычки.

Спасибо за чтение.

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

Вы можете сделать это с помощью регулярных выражений.

В Regex 101, https://regex101.com/r/gJ0zVK/1/ вы можете увидеть объяснение на правой панели.В основном мы ищем строку, которая начинается с кавычки, имеет содержимое до запятой, а затем до следующей кавычки.Затем вы просто заменяете все это на захваченные группы (без запятой)

function removeCommaAndQuotes(str) {
  const regex = /"([^",]+),([^",]+)"/gm;
  while (regex.test(str)) {
    str = str.replace(regex, '$1$2')
  }

  return str;
}


let str = 'qq22, abc123, "1,200", aaa';
removeCommaAndQuotes(str);
0 голосов
/ 01 марта 2019

Вы можете использовать два регулярных выражения, чтобы найти кавычки в строке, а затем найти заменяющую часть (запятая и кавычка):

let row = 'qq22, abc123, "1,200", aaa';
const findQuoteRegex = /".*"/;
const replaceCommaAndQuoteRegex = /"([^",]+),([^",]+)"/gm;

while (row.match(findQuoteRegex)) {
    row = row.replace(replaceCommaAndQuoteRegex, '$1$2');
}

console.log(row);
// output qq22, abc123, 1200, aaa
0 голосов
/ 01 марта 2019

Как насчет этого регулярного выражения: const regex = /(.*)(".*")(.*)/

Это будет соответствовать 3 группам.Для вашего примера String (qq22, abc123, "1,200", aaa) он вернет следующие группы:

  • qq22, abc123,
  • "1,200"
  • , aaa

Тогда вы получите вторую группу и замените все запятые.Предполагая, что вы назвали переменную из проверки соответствия регулярному выражению, ваш код может выглядеть так:

match[1] = match[1].replace(/,/g, '');

g обозначает глобальный, что означает, что он заменит все вхождения.Вы также можете сделать это для " - я думаю, что вы также можете, но это в одном регулярном выражении, как это /,|"/g.Затем вам придется собрать все три группы вместе:

const result = match[0] + match[1] + match[2]

, и это даст вам отредактированную версию.Это немного грязно, и я бы порекомендовал вам использовать парсер CSV, как уже было сказано в комментариях к вашему ответу

...