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

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

Есть строка. Это кусок из csv файла.
"a,b",a b,,,,,,,,,,,,,,,,,,,,
Я разбиваю данные из csv по строкам используя split("\r\n") а затем разбиваю по клеткам используя split(",")
Но если в клетке прописать запятую например a,b то разбиение произойдет не верно.
Если в клетке нет запятой то данные из клетки будут выглядеть так
a b
Если в клетке есть запятая то данные из клетки будут выглядеть так
"a,b"
Не могу придумать как разбить эту троку так чтоб запятая такм где "a,b" игнорировалась.
Есть ли способ как то праильно разбить эти данные?
  • Вопрос задан
  • 104 просмотра
Подписаться 1 Простой 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Академия Eduson
    Fullstack-разработчик на JavaScript
    11 месяцев
    Далее
Решения вопроса 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", "" ]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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