簡體   English   中英

在匹配正則表達式中獲取多行

[英]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 不支持它:

幾個選項:

  1. 正如該博客中所建議的,您可以使用 XRegExp 庫。

  2. 您可以嘗試用您確定不會出現在數據中的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM