1

I want to split a string into fixed sized chunks (say 140 characters each) in JavaScript using space as delimiter(i.e it should not break words), Note: It should handle newline character Currently I'm using wordwrap npm package, but It does not handle new-line character.

var wrap = require('wordwrap')(140)    
var str = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum"
console.log(wrap(str));

It works fine for normal text but if text contains new-line carriage I get following error:
SyntaxError: Unexpected token ILLEGAL
at exports.runInThisContext (vm.js:73:16)
at Module._compile (module.js:443:25)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3

9
  • please add some examples. Commented Jun 4, 2016 at 13:00
  • Can you include string at Question? What should be size of "fixed sized chunks"? What have you tried? Commented Jun 4, 2016 at 13:00
  • @Mohan stackoverflow.com/help/how-to-ask Commented Jun 4, 2016 at 13:06
  • please add the wanted output, too. Commented Jun 4, 2016 at 13:10
  • 1
    It works fine you should show example, that not works Commented Jun 4, 2016 at 13:25

2 Answers 2

2

// define string variable
var string = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum"

function sliceMyString(str){
// initialize array (not required but verbose)
    var slices = [];

// while string is not empty
// take 140 characters
// check witch one was the last space or if the end of the line is reached
// then => push them in slices
// then => remove them from the string

    while(str != ''){
        var lastSpace = 0;

        for(var i = 0; i < str.length && i < 140; i ++){
            if(str[i] == ' '){
                lastSpace = i;
            }
            if(i == str.length - 1){
                lastSpace = str.length;
            }
        }

// insert into array (including trailing space, see below the codeblock)
        slices.push(str.slice(0, lastSpace));
        str = str.slice(lastSpace);
    }

// just logging the variables in the slices array

    slices.map(function(slice){
        console.log(slice);
    });
}

sliceMyString(string);

If you want to remove the trailing space, you can use trim():

slices.push(str.slice(0, lastSpace).trim());
Sign up to request clarification or add additional context in comments.

2 Comments

Hi @randy, It surely breaks string into 140 character long chunks but it splits a word, eg, word "since" is broken at the end as String-1 "... sin" String-2 "ce .."
@randy Thanks, It was useful.
0

I was originaly trying to implement Randy's answer, but found I need different implementation:

  • batch size as parameter,
  • didn't like the while loop
  • and thought it could be done without spliting the string.

Here's my solution:

var testString = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum";

function stringChunks(str, chunkSize) {
	chunkSize = (typeof chunkSize === "undefined") ? 140 : chunkSize;
	let resultString = "";
	
	if ( str.length>0 ) {
		let resultArray = [];
		let chunk = "";
 		for ( let i = 0; i<str.length; i=(i+chunkSize) ) {
 			chunk = str.substring(i,i+chunkSize);
 			if ( chunk.trim()!="" ) {
 				resultArray.push(chunk);
 			}
 		}
 		if (resultArray.length) {
 			resultString = resultArray.join("/\n");
 		}
  } else {
  	resultString = str;
  }
	
	return resultString;
}

console.log( stringChunks(testString) );

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.