Как разбить строку на Javascript, но не в кавычках? - PullRequest
0 голосов
/ 18 января 2020

Я нашел много вопросов о простых разделениях, но мой файл похож на файл CSV, и некоторые строки заключены в кавычки и могут содержать запятые.

Пример:

myKey,this is a string,"This is yet, another, string"

Требуемый результат:

["myKey", "this is a string", "This is yet, another, string"]

Я нашел похожий вопрос, но не смог правильно его адаптировать:

str.split(/([^,"]+|[^,"]*)+/g)[0]

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

Ответы [ 2 ]

1 голос
/ 18 января 2020

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

var s = 'myKey,this is a string,"This is yet, another, string"';
var result = Array.from(s.matchAll(/[^",]+|"([^"]*)"/g), ([a,b]) => b || a);
console.log(result);
0 голосов
/ 18 января 2020
'myKey,this is a string,"This is yet, another, string"'
    .split(/,(?=(?:[^"]*"[^"]*")*$)/g);
// ["myKey", "this is a string", "\"This is yet, another, string\""]

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

...