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);
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
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*$/, '');
};
Dans ES6 :
var temp = str.split(",").map((item)=>item.trim());
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);