Задать вопрос
@newaitix

Как разбить строку по знаку?

Есть строка. Это кусок из csv файла.
"a,b",a b,,,,,,,,,,,,,,,,,,,,
Я разбиваю данные из csv по строкам используя split("\r\n") а затем разбиваю по клеткам используя split(",")
Но если в клетке прописать запятую например a,b то разбиение произойдет не верно.
Если в клетке нет запятой то данные из клетки будут выглядеть так
a b
Если в клетке есть запятая то данные из клетки будут выглядеть так
"a,b"
Не могу придумать как разбить эту троку так чтоб запятая такм где "a,b" игнорировалась.
Есть ли способ как то праильно разбить эти данные?
  • Вопрос задан
  • 94 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
function CSVToArray(strData, strDelimiter = ','){
  const objPattern = new RegExp(
    "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
    "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
    "([^\"\\" + strDelimiter + "\\r\\n]*))",
    'gi'
  );
  const arrData = [[]];
  let arrMatches = null;
  while (arrMatches = objPattern.exec(strData)){
    const strMatchedDelimiter = arrMatches[ 1 ];
    if (
      strMatchedDelimiter.length &&
      strMatchedDelimiter !== strDelimiter
    ) {
      arrData.push([]);
    }
    const strMatchedValue = arrMatches[2]
      ? arrMatches[2].replace(new RegExp("\"\"", 'g' ), "\"")
      : arrMatches[3];
    arrData[arrData.length - 1].push(strMatchedValue);
  }
  return( arrData );
}

console.log(CSVToArray('"a,b",a b,')); // Array(3) [ "a,b", "a b", "" ]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы