Javascript Split Space Ограниченная строка и дополнительные запятые и пробелы

Мне нужно разбить строку ключевого слова и превратить ее в строку с разделителями-запятыми. Однако мне нужно избавиться от лишних пробелов и любых запятых, которые пользователь уже ввел.

var keywordString = "ford    tempo, with,,, sunroof";

Вывод на эту строку:

ford,tempo,with,sunroof,

Мне нужна конечная запятая и пробелы в конечном выходе.

Не уверен, что я должен пойти в Regex или функцию разделения строк.

Кто-нибудь уже делает что-то подобное?

Мне нужно использовать javascript (или JQ).

EDIT (рабочее решение):

var keywordString = ", ,, ford,    tempo, with,,, sunroof,, ,";

//remove all commas; remove preceeding and trailing spaces; replace spaces with comma

str1 = keywordString.replace(/,/g , '').replace(/^\s\s*/, '').replace(/\s\s*$/, '').replace(/[\s,]+/g, ',');


//add a comma at the end
str1 = str1 + ',';

console.log(str1);

Ответ 1

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

str = str.split(/[\s,]+/).join();

Это разделяет и потребляет любые последовательные пробелы и запятые. Точно так же вы можете просто сопоставить и заменить эти символы:

str = str.replace(/[\s,]+/g, ',');

Для конечных запятых просто добавьте один

str = .... + ',';

Если у вас есть предыдущие и конечные пробелы, вы должны сначала удалить их.

Ссылка: .split, .replace, Регулярные выражения

Ответ 2

В дополнение к Феликс Клинг ответ

Если у вас есть предыдущие и завершающие пробелы, вы должны удалить первых.

Можно добавить "метод расширения" в JavaScript String, подключив его к прототипу. Я использовал следующее, чтобы обрезать предыдущие и конечные белые пробелы, и до сих пор это работало:

// trims the leading and proceeding white-space
String.prototype.trim = function()
{
    return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
};

Ответ 3

В ES6:

var temp = str.split(",").map((item)=>item.trim());

Ответ 4

Я бы сохранил это просто и просто совпадал с тем, что не разрешалось, чтобы присоединиться к:

str.split(/[^a-zA-Z-]+/g).filter(v=>v);

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

var str = ", ,, ford,    tempo, with,,, sunroof,, ,";

var result = str.split(/[^a-zA-Z-]+/g).filter(v=>v).join(',');

console.info(result);

Ответ 5

Если вы просто хотите раскол, обрезать и присоединиться, сохраняя пробелы, вы можете сделать это с помощью lodash:

// The string to fix
var stringToFix = "The Wizard of Oz,Casablanca,The Green Mile";

// split, trim and join back without removing all the whitespaces between
var fixedString = _.map(stringToFix.split(','), _.trim).join(' == ');

// output: "The Wizard of Oz == Casablanca == The Green Mile"
console.log(fixedString);
<script src="https://cdn.jsdelivr.net/lodash/4.16.3/lodash.min.js"></script>