我正在尝试将文件内容拆分为一定大小的块(比如40000个字符,包括空格和什么不是)
但是,当线路发生变化时,我将数组拆分,这是不必要的行为。
var files = $('#upload').get(0).files;
if (files.length > 0) {
var reader = new FileReader()
reader.onloadend = function () {
var content = reader.result
var buffer = 40000
var contentList = content.match(new RegExp('.{1,' + buffer + '}', 'gm'))
console.info('list : ', contentList)
}
reader.readAsBinaryString(files[0])
}
一个额外的问题,我可以看到没有迹象表明文件中有新行被读取,尽管文件中明显有多行。我偶尔会遗漏像\n
这样的东西。
答案 0 :(得分:1)
更新:我刚刚看了一下XRegExp库支持捕获换行符的功能,它非常简单:它只是替换了所有.
个字符(除了匹配所有字符外)字符类[\s\S]
,匹配所有字符句点的新行)。这是有效的,因为\s
匹配一组特定的空白字符,\S
(大写s)与\s
完全相反。取两者的结合,没有不匹配的角色。所以,@apsillers的建议完全正确:用[\s\S]
替换你的点以匹配任何角色。
您正在寻找的是“单线模式”,不幸的是,JavaScript不支持它:
有两种选择:
正如该博客所述,您可以使用XRegExp库。
您可以尝试使用您确定不会在数据中显示的Unicode代码点替换换行符,然后在执行RegExp匹配后将其替换回来:
var input = ...;
var inputSingleLine = input.replace(/\n/g, "\u27BF");
var contentList = inputSingleLine.match(new RegExp('.{1,' + buffer + '}', 'gm'));
for (var index = 0; index < contentList.length; index++)
contentList[index] = contentList[index].replace(/\u27BF/g, "\n");
console.info('list : ', contentList);
(假设您可以在开始匹配之前将整个文件(包括所有换行符)放入单个变量中)