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>