在匹配正则表达式中获取多行
Get multiple lines in match regex
我正在尝试将文件的内容拆分成一定大小的块(比如 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
之类的东西。
更新: 我刚刚查看了 XRegExp 库为支持捕获换行符所做的工作,它非常简单:它只是替换所有 .
个字符(匹配除换行符以外的所有内容)与字符 class [\s\S]
,匹配所有字符句点。这是有效的,因为 \s
匹配一组特定的空白字符,而 \S
(大写 s)匹配 \s
的相反字符。结合两者,没有不匹配的字符。所以,@apsillers 的建议是完全正确的:用 [\s\S]
替换你的点以匹配任何字符。
您要找的是 "single line mode",很遗憾,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);
(假设您可以在开始匹配之前将整个文件(包括所有换行符)放入一个变量中)
我正在尝试将文件的内容拆分成一定大小的块(比如 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
之类的东西。
更新: 我刚刚查看了 XRegExp 库为支持捕获换行符所做的工作,它非常简单:它只是替换所有 .
个字符(匹配除换行符以外的所有内容)与字符 class [\s\S]
,匹配所有字符句点。这是有效的,因为 \s
匹配一组特定的空白字符,而 \S
(大写 s)匹配 \s
的相反字符。结合两者,没有不匹配的字符。所以,@apsillers 的建议是完全正确的:用 [\s\S]
替换你的点以匹配任何字符。
您要找的是 "single line mode",很遗憾,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);
(假设您可以在开始匹配之前将整个文件(包括所有换行符)放入一个变量中)