var convertToArray = (txt) => {
let arr = txt.split(" ");
console.log(arr);
};
convertToArray("Hello World ");
At the end of Hello World
I have 4 spaces and now I need to take that whitespace as element of an array.
E.g.: ["Hello", "World", " "]
Use String.match
instead of split
and filter out the single spaces. Something like:
const convertToArray = (txt) => {
return txt.match(/\s{1,}|\b(.+?)\b/g)?.filter(v => v !== ` `);
};
console.log(JSON.stringify(convertToArray("Hello World ")));
console.log(JSON.stringify(convertToArray(" Hello World and bye again ")));
Note: the above will only work for words within word boundaries (letters (A–Z, a–z), numbers (0–9), and underscore (_)). When all characters in words should be included (like in "Hello World! "), feel free to use this parsing function:
console.log(
JSON.stringify(parseWords(`Hello World! `)));
console.log(
JSON.stringify(parseWords(`Hello World! And well... bye again! `)));
// including single spaces
console.log(
JSON.stringify(parseWords(`Hello World! And well... bye again! `, 1)));
function parseWords(txt, includeSingleSpaces = false) {
let result = [txt[0]];
txt = txt.slice(1).split('');
while (txt.length) {
const last = result[result.length - 1].at(-1);
if (txt[0] === ` ` && last === ` ` || txt[0] !== ` ` && last !== ` `) {
result[result.length - 1] += txt.shift();
continue;
}
if (last !== ` ` && txt[0] === ` ` || last === ` ` && txt[0] !== ` `) {
result.push(txt.shift());
continue;
}
result[result.length - 1] += txt.shift();
result.push(txt.shift());
}
return includeSingleSpaces ? result : result.filter(v => v !== ` `);
}