Regex/Jquery — возвращать пустые значения

Я сортирую разбиение файла CSV (используя .match()) запятыми вне кавычек, и то, что у меня есть, пока работает:

/"[^"]*"|[^,]+/g

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

...,xxx,,xxx,...

и я хочу, чтобы произошло то, что я получаю массив из массива:

[...,xxx, ,xxx,...]

но вместо этого я получаю

[...,xxx,xxx,...]

изменить его на

 /"[^"]*"|[^,]*/g

не так хорошо получается. Есть предположения?


person Evan Ward    schedule 12.11.2013    source источник
comment
Предоставьте несколько примеров входных значений.   -  person anubhava    schedule 12.11.2013
comment
Взгляните на этот ответ: stackoverflow.com/questions/6428053/   -  person Sukima    schedule 12.11.2013


Ответы (4)


Я попытался изменить исходное регулярное выражение, чтобы также добавить пустые элементы, если у вас есть последовательности ,,. Он не добавляет пустой элемент для "a",, но я предполагаю, что это не то, что вам нужно

Регулярное выражение:

/"[^"]*"|[^,]+|(?=,,)/g

Пример использования:

var input = 'ACP,Something,,"Some long, sentence, with commas",other things';

var matches = input.match(/"[^"]*"|[^,]+|(?=,,)/g);

console.log(matches); // ["ACP", "Something", "", "\"Some long, sentence, with commas\"", "other things"]

ДЕМО: http://jsbin.com/uzaDeRe/1/edit

person Tibos    schedule 12.11.2013
comment
Я использую string.match(), а не разделяю, извините за это. Регулярное выражение работает для того, что я делаю, за исключением того, что если в строке есть область ,, оно ничего не возвращает, а возвращает пустой элемент. - person Evan Ward; 12.11.2013
comment
Кажется, я понимаю, чего ты хочешь сейчас. Проверьте мой отредактированный пост, пожалуйста. - person Tibos; 12.11.2013
comment
Спасибо! Это прекрасно работает. Я еще не слишком знаком с регулярными выражениями, не могли бы вы объяснить часть (?=,,)? Я предполагаю, что он просто проверяет «,,». - person Evan Ward; 12.11.2013
comment
Это называется позитивным просмотром вперед. В основном проверяет, являются ли следующие символы ,,, но не использует их! Таким образом, это соответствует любой пустой строке, за которой следуют две запятые. regular-expressions.info/lookaround.html - person Tibos; 12.11.2013

Вы можете использовать функцию замены следующим образом:

var str = yourString.replace(/,,/g,', ,')


И после этого вы получите то, что вам нужно, с вашим регулярным выражением, надеюсь, это поможет. Ваше здоровье.

person Kamil Wozniak    schedule 12.11.2013
comment
Это решение, похоже, добавляет в строку нежелательные пробелы. - person Tibos; 12.11.2013

Глупый вопрос: почему вы используете здесь регулярное выражение?

console.log("aaa,xxx,,xxx,,yyy,zzz".split(","));

> ["aaa", "xxx", "", "xxx", "", "yyy", "zzz"]
person eightyfive    schedule 12.11.2013
comment
Потому что строка, которую я разбиваю, выглядит примерно так: ACP, Something, Some long, предложение, с запятыми, другими вещами, поэтому она будет разбиваться на запятые внутри кавычек. - person Evan Ward; 12.11.2013

Не используйте замену. Вместо этого разделите на регулярное выражение values.split(/super awesome regexp/) Однако вы, вероятно, хотите лучше контролировать. См. этот ответ для лучшего решения.

person Sukima    schedule 12.11.2013
comment
это разбивается на каждую запятую - person Evan Ward; 12.11.2013