将JavaScript(nodeJS)字符串拆分为固定大小的块

时间:2016-06-04 12:59:24

标签: javascript node.js

我想在JavaScript中使用空格作为分隔符(即不应该破坏单词)将字符串拆分为固定大小的块(每个140个字符),注意:它应该处理换行符 目前我使用的是wordwrap npm包,但它不处理换行符。

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

它适用于普通文本,但如果文本包含换行符,则会出现以下错误:
SyntaxError:意外的标记ILLEGAL
    在exports.runInThisContext(vm.js:73:16)
    在Module._compile(module.js:443:25)
    在Object.Module._extensions..js(module.js:478:10)
    在Module.load(module.js:355:32)
    在Function.Module._load(module.js:310:12)
    在Function.Module.runMain(module.js:501:10)
    在启动时(node.js:129:16)
    在node.js:814:3

2 个答案:

答案 0 :(得分: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);
&#13;
&#13;
&#13;

如果要删除尾随空格,可以使用trim()

slices.push(str.slice(0, lastSpace).trim());

答案 1 :(得分:0)

我本来是试图实现Randy's答案的,但发现我需要不同的实现:

  • 批量大小作为参数
  • 不喜欢while循环
  • ,并认为可以在不分割字符串的情况下完成此操作。

这是我的解决方法:

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