Jument Split Split Delimited String et Trim Comas et espaces supplémentaires

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

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

Sortie sur cette chaîne:

 ford,tempo,with,sunroof, 

J'ai besoin de la virgule de départ et sans espace dans la sortie finale.

Je ne sais pas si je devrais aller Regex ou une fonction de fractionnement de chaîne.

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

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

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

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

Cela se divise et consomme des espaces blancs consécutifs et des virgules. De même, vous pouvez simplement combiner et remplacer ces caractères:

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

Pour la virgule de départ, il suffit d'ajouter une

 str = .... + ','; 

Si vous avez des espaces blancs avant et arrière, vous devez les supprimer d'abord.

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

En plus de la réponse de Felix Kling

Si vous avez des espaces blancs avant et arrière, vous devez les supprimer d'abord.

Il est possible d'ajouter une "méthode d'extension" à une String JavaScript en l'accrochant dans son prototype. J'ai utilisé ce qui suit pour recadrer des espaces blancs précédents et en arrière, et jusqu'à présent, ça a réussi:

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

Dans ES6 :

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

Je le simplifierais, et je viens de faire correspondre tout ce qui n'est pas permis à 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 eux. Pour éliminer l'entrée vide au début et à la fin, un filtre simple pour les valeurs non nulles le fera. Voir les explications détaillées sur regex101 .

 var str = ", ,, ford, tempo, with,,, sunroof,, ,"; var result = str.split(/[^a-zA-Z-]+/g).filter(v=>v).join(','); console.info(result); 

Si vous souhaitez simplement diviser, couper et joindre en gardant les espaces blancs, vous pouvez le faire avec 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>