2013-11-04 14 views
5

うまくいけば、既存の質問を複製しないでくださいが、私は本当にここでこの質問を持っている誰かを見つけることができませんでした。私はいくつかのeol文字で大きな文字列をループし、これらの行のそれぞれを探して文字を探し出す必要があります。私は次のことをすることができましたが、この大きな文字列には5000文字を超える可能性があるのであまり効率的ではないと感じています。Javascriptで行末の文字列を分割し、各行を読み取る

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

、その後、私は本当にjqueryのを使用傾けるだけの簡単なJavaScriptを使用することができ、アレイ

としてSTRをループ。

他に効率的な方法がありますか?

+0

なるほど[].forEachを使用することをお勧めします、あなたは、バックグラウンドで文字列を解析することができます。 http://www.w3schools.com/html/html5_webworkers.asp – Hellgorithm

+0

正規表現の使用はどうですか? – l2mt

+5

これはうまくいくはずです - それを簡単にする明白な方法はありません。現代のコンピュータ、スマートフォンでさえ、5000文字は何もありません。これが遅すぎるという証拠がありますか? – jfriend00

答えて

-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はあることを行っている方法を知っている場合、これは有用であろうHere

を見つけることができます')メソッドをループで使用するのがおそらく最適です。

+0

正規表現は '.split()'よりも速くなる可能性は非常に低いです。また、 '\ s'には' \ n'が含まれているので、これは動作しないと考えています。 – jfriend00

+0

私は彼がそれを探していく方法を知らないと考えて、私は彼に私ができることを与えました。私がもっと知っていれば、私はもっと助けることができました。私は彼が '.split()'何かをして、文字列ごとに正規表現を使って、自分が望むものを見つけ出すことができると思います。 – Jhecht

0

改行を取得すると、手作業でそれを読み取り、ハンドラを呼び出すことができます。 CPU使用率はそれほど効率的ではありませんが、メモリ使用量は少なくなります。ただし、文字列が数MB未満であれば問題ありません。

2

文字列の各行を取得するのに、常にindexOfsubstringを使用できます。私はこの質問を見ていない

var input = 'Your large string with multiple new lines...'; 
var char = '\n'; 
var i = j = 0; 

while ((j = input.indexOf(char, i)) !== -1) { 
    console.log(input.substring(i, j)); 
    i = j + 1; 
} 

編集が答える前に、とても古かったです。 #fail

+0

2017年に同じ質問をしている人として、これまでの質問にもかかわらず、この回答を投稿してうれしく思います。これは今までで最高のものです – Spookbuster

+0

フィードバックとアップヴォートに感謝します。 – fubar

0

5000は、現代のJavaScriptエンジンにとってそれほど強くはないようです。もちろん、各反復で何をするかによっても異なります。明確にするために、私はあなたがウェブの労働者を使用することができます... eol.split

const eol = require('eol') 
let lines = eol.split(text) 
lines.forEach(function(line) { 
    // ... 
}) 
関連する問題