7

いくつかの eol 文字を含む大きな文字列をループし、これらの各行を読み取って文字を探す必要があります。次のようにすることもできましたが、この大きな文字列には 5000 文字を超える可能性があるため、あまり効率的ではないと感じています。

var str = largeString.split("\n");

次に、str を配列としてループします。

私は本当にjqueryを使うことができず、単純なJavaScriptしか使えません。

これを行う他の効率的な方法はありますか?

4

6 に答える 6

2

NodeJS を使用していて、行ごとに処理する大きな文字列がある場合:

const Readable = require('stream').Readable
const readline = require('readline')

promiseToProcess(aLongStringWithNewlines) {
    //Create a stream from the input string
    let aStream = new Readable();
    aStream.push(aLongStringWithNewlines);
    aStream.push(null);  //This tells the reader of the stream, you have reached the end

    //Now read from the stream, line by line
    let readlineStream = readline.createInterface({
      input: aStream,
      crlfDelay: Infinity
    });

    readlineStream.on('line', (input) => {
      //Each line will be called-back here, do what you want with it...
      //Like parse it, grep it, store it in a DB, etc
    });

    let promise = new Promise((resolve, reject) => {
      readlineStream.on('close', () => {
        //When all lines of the string/stream are processed, this will be called
        resolve("All lines processed");
      });
    });

    //Give the caller a chance to process the results when they are ready
    return promise;
  }
于 2019-08-09T15:37:49.633 に答える
0

1 文字ずつ手動で読み取り、改行を取得したときにハンドラーを呼び出すことができます。CPU 使用率の点でより効率的である可能性は低いですが、使用するメモリが少なくなる可能性があります。ただし、文字列が数 MB 未満であれば問題ありません。

于 2016-11-28T12:18:52.033 に答える
-1

方法はわかっているのに、それ以上の方法がないことを確認しているだけなのですか? ええと、あなたが言及した方法はまさにそれであると言わざるを得ません。特定の文字で分割された特定のテキストを探している場合は、正規表現の一致を検索することをお勧めします。JS 正規表現リファレンスはここにあります

これは、テキストがどのようにセットアップされるかを知っている場合に役立ちます。

var large_str = "[important text here] somethign something something something [more important text]"
var matches = large_str.match(\[([a-zA-Z\s]+)\])
for(var i = 0;i<matches.length;i++){
   var match = matches[i];
   //Do something with the text
}

それ以外の場合は、ループを使用した large_str.split('\n') メソッドがおそらく最適です。

于 2013-11-04T03:26:16.227 に答える