简体   繁体   中英

Javascript Split Space Delimited String and Trim Extra Commas and Spaces

I need to split a keyword string and turn it into a comma delimited string. However, I need to get rid of extra spaces and any commas that the user has already input.

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

Output to this string:

ford,tempo,with,sunroof,

I need the trailing comma and no spaces in the final output.

Not sure if I should go Regex or a string splitting function.

Anyone do something like this already?

I need to use javascript (or JQ).

EDIT (working solution):

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

You will need a regular expression in both cases. You could split and join the string:

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

This splits on and consumes any consecutive white spaces and commas. Similarly, you could just match and replace these characters:

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

For the trailing comma, just append one

str = .... + ',';

If you have preceding and trailing white spaces, you should remove those first.

Reference: .split , .replace , Regular Expressions

ES6 中

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

In addition to Felix Kling 's answer

If you have preceding and trailing white spaces, you should remove those first.

It's possible to add an "extension method" to a JavaScript String by hooking into it's prototype. I've been using the following to trim preceding and trailing white-spaces, and thus far it's worked a treat:

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

I would keep it simple, and just match anything not allowed instead to join on:

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

This matches all the gaps, no matter what non-allowed characters are in between. To get rid of the empty entry at the beginning and end, a simple filter for non-null values will do. See detailed explanation on regex101 .

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

let query = "split me by space and remove trailing spaces and store in an array  ";
let words = query.trim().split(" ");
console.log(words)

Output : [ 'split', 'me', 'by', 'space','and','remove', 'trailing', 'spaces', 'and', 'store', 'in', 'an', 'array' ]

If you just want to split, trim and join keeping the whitespaces, you can do this with 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>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM