2013-11-04 10 views
5

Hoffentlich bin ich nicht eine vorhandene Frage duplizieren, aber ich konnte wirklich niemand finden, der diese Frage hier hat. Ich muss eine große Zeichenfolge mit mehreren eol-Zeichen durchlaufen und jede dieser Zeilen nach Zeichen suchen. Ich könnte das Folgende machen, aber ich fühle, dass es nicht sehr effizient ist, da es mehr als 5000 Zeichen in dieser großen Zeichenfolge geben könnte.Javascript, um die Zeichenkette nach Zeilenendezeichen aufzuteilen und jede Zeile zu lesen

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

und dann eine Schleife durch str als Array

ich wirklich verwenden jquery Überhöhung und nur einfache JavaScript verwenden können.

Gibt es eine andere effiziente Möglichkeit, dies zu tun?

+0

mit hmmm ... Sie Web-Arbeiter verwenden können, können Sie Zeichenfolge im Hintergrund analysieren. http://www.w3schools.com/html/html5_webworkers.asp – Hellgorithm

+0

Was ist mit einem regulären Ausdruck? – l2mt

+5

Das sollte gut funktionieren - es gibt keinen offensichtlichen Weg, es einfacher zu machen. 5000 Zeichen sind nichts für einen modernen Computer, nicht einmal für ein Smartphone. Haben Sie Beweise dafür, dass dies zu langsam ist? – jfriend00

Antwort

-1

Also, Sie wissen, wie es geht, Sie stellen nur sicher, dass es keinen besseren Weg gibt, es zu tun? Nun, ich muss sagen, dass Sie genau das gesagt haben. Auch wenn Sie nach einem bestimmten Text suchen, der nach bestimmten Zeichen aufgeteilt ist, können Sie nach einem regulären Treffer suchen. Ein JS Regex Referenz kann Here

Dies wäre nützlich finden, wenn Sie wissen, wie der Text-Setup sein wird, so etwas wie

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 
} 

Ansonsten ja, die large_str.split ('\ n ') Methode mit einer Schleife ist wahrscheinlich am besten.

+0

Eine Regex ist sehr wahrscheinlich nicht schneller als '.split()'. Ich glaube auch nicht, dass dies funktionieren wird, weil "\ s" '\ n' enthält, wird es nicht an Liniengrenzen brechen. – jfriend00

+0

In Anbetracht dessen, ich weiß nicht, wie er danach suchen wird, gab ich ihm, was ich konnte. Wenn ich mehr wüsste, könnte ich mehr helfen. Ich nehme an, er könnte etwas "split"() und dann eine Regex pro String verwenden, um zu finden, was immer er wollte. – Jhecht

0

Sie können es manuell Zeichen für Zeichen lesen und einen Handler aufrufen, wenn Sie einen Zeilenumbruch erhalten. Es ist unwahrscheinlich, dass es hinsichtlich der CPU-Auslastung effizienter ist, aber wahrscheinlich weniger Speicher belegt. Solange die Zeichenfolge jedoch weniger als einige MB beträgt, sollte dies keine Rolle spielen.

2

Sie könnten immer indexOf und substring verwenden, um jede Zeile der Zeichenfolge zu übernehmen.

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; 
} 

bearbeiten ich diese Frage nicht gesehen habe war so alt, bevor er antwortete. #fail

+0

Als jemand, der die gleiche Frage im Jahr 2017 hat, bin ich froh, dass Sie diese Antwort trotz der alten Frage, es ist die beste bisher – Spookbuster

+0

Cheers für das Feedback und die Upvote. – fubar

0

5000 scheint für eine moderne JavaScript-Engine nicht so intensiv zu sein. Natürlich hängt es auch davon ab, was Sie bei jeder Iteration machen. Aus Gründen der Übersichtlichkeit wird empfohlen, ich eol.split und [].forEach

const eol = require('eol') 
let lines = eol.split(text) 
lines.forEach(function(line) { 
    // ... 
})