[英]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 庫為支持捕獲換行符所做的工作,它非常簡單:它只是替換了所有.
字符(匹配除換行符以外的所有內容)與字符類[\\s\\S]
,匹配所有字符句點。 這是有效的,因為\\s
匹配一組特定的空白字符,而\\S
(大寫 s)與\\s
完全相反。 以兩者的結合為例,沒有不匹配的字符。 所以,@apsillers 的建議是完全正確的:用[\\s\\S]
替換你的點以匹配任何字符。
您正在尋找的稱為“單行模式”,不幸的是,JavaScript 不支持它:
幾個選項:
正如該博客中所建議的,您可以使用 XRegExp 庫。
您可以嘗試用您確定不會出現在數據中的 Unicode 代碼點替換換行符,然后在執行 RegExp 匹配后將其替換回:
var input = ...; var inputSingleLine = input.replace(/\\n/g, "\➿"); var contentList = inputSingleLine.match(new RegExp('.{1,' + buffer + '}', 'gm')); for (var index = 0; index < contentList.length; index++) contentList[index] = contentList[index].replace(/\➿/g, "\\n"); console.info('list : ', contentList);
(這假設您可以在開始匹配之前將整個文件(包括所有換行符)放入單個變量中)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.