web-dev-qa-db-fra.com

Javascript Split Space String et Trim Extra Virgules et espaces

Je dois diviser une chaîne de mots-clés et la transformer en chaîne délimitée par des virgules. Cependant, je dois supprimer les espaces et les virgules supplémentaires que l'utilisateur a déjà saisis. 

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

Sortie vers cette chaîne:

ford,tempo,with,sunroof,

J'ai besoin de la virgule de fin et aucun espace dans la sortie finale.

Pas sûr si je devrais aller Regex ou une fonction de division de chaîne.

Quelqu'un a déjà fait quelque chose comme ça?

J'ai besoin d'utiliser javascript (ou JQ).

EDIT (solution de travail):

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);
12
User970008

Vous aurez besoin d'une expression régulière dans les deux cas. Vous pouvez diviser et rejoindre la chaîne:

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

Cela se divise et consomme tous les espaces et virgules consécutifs. De même, vous pouvez simplement faire correspondre et remplacer ces caractères:

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

Pour la virgule finale, il suffit d’en ajouter un

str = .... + ',';

Si vous avez des espaces blancs précédents et suivants, vous devez d'abord les supprimer.

Référence: .split , .replace , Expressions régulières

31
Felix Kling

En plus de Felix Kling / s répondre

Si vous avez des espaces blancs précédents et suivants, vous devez supprimer En premier.

Il est possible d’ajouter une "méthode d’extension" à une String JavaScript en s’accrochant à son prototype. Je me sers de ce qui suit pour supprimer les espaces blancs précédents et suivants. Jusqu'à présent, cela a fonctionné comme une gâterie:

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

Dans ES6 :

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

Je voudrais garder les choses simples, et juste faire correspondre n'importe quoi not autorisé à rejoindre à la place:

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

Cela correspond à toutes les lacunes, quels que soient les caractères non autorisés entre les deux. Pour se débarrasser de l'entrée vide au début et à la fin, un simple filtre pour les valeurs non nulles fera l'affaire. Voir explication détaillée sur regex101 .

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

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

console.info(result);

0
Benny Bottema