2013-11-04 28 views
5

Speriamo di non duplicare una domanda esistente ma non troverei davvero nessuno che abbia questa domanda qui. Ho bisogno di scorrere una grande stringa con diversi personaggi eol e leggere ognuna di queste righe alla ricerca di caratteri. Potrei fare quanto segue, ma ritengo che non sia molto efficiente in quanto potrebbero esserci più di 5000 caratteri in questa grande stringa.Javascript per dividere la stringa in base al carattere di fine riga e leggere ogni riga

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

e quindi scorrere str come un array

smusso realmente utilizzare jQuery e può utilizzare solo semplice JavaScript.

Esiste un altro modo efficace per farlo?

+0

hmmm ... è possibile utilizzare i lavoratori web, è possibile analizzare la stringa in background. http://www.w3schools.com/html/html5_webworkers.asp – Hellgorithm

+0

cosa ne pensi di usare un'espressione regolare? – l2mt

+5

Questo dovrebbe funzionare bene - non c'è un modo ovvio per farlo più semplice. 5000 caratteri non sono niente per un computer moderno, nemmeno uno smartphone. Avete alcune prove che questo è troppo lento? – jfriend00

risposta

-1

Quindi, sai come farlo, ti stai solo assicurando che non ci sia modo migliore per farlo? Beh, direi che il modo in cui hai menzionato è esattamente questo. Sebbene tu possa voler cercare una corrispondenza regolare, se stai cercando un determinato testo diviso da determinati caratteri. Un JS Regex di riferimento può essere trovato Here

Questo potrebbe essere utile se si sa come il testo sta per essere messa a punto, qualcosa di simile a

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 
} 

In caso contrario, sì, il large_str.split ('\ n ') il metodo con un ciclo è probabilmente il migliore.

+0

Una regex è molto improbabile che sia più veloce di '.split()'. Inoltre, non penso che funzionerà perché '\ s' include' \ n' non si romperà sui confini delle linee. – jfriend00

+0

Considerando che non so come sta andando a cercarlo, gli ho dato quello che potevo. Se sapessi di più, potrei aiutare di più. Suppongo che potrebbe '.split()' qualcosa e quindi usare una regex per stringa per trovare qualunque cosa volesse. – Jhecht

0

Si può leggere manualmente carattere per carattere e chiamare un gestore quando si ottiene una nuova riga. È improbabile che sia più efficiente in termini di utilizzo della CPU, ma probabilmente occuperà meno memoria. Tuttavia, a condizione che la stringa sia inferiore a pochi MB, non dovrebbe avere importanza.

2

È possibile utilizzare sempre indexOf e substring per prendere ogni riga della stringa.

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

Edit non ho visto questa domanda era così vecchio prima di rispondere. #fail

+0

Come qualcuno che sta avendo la stessa domanda nel 2017, sono felice che tu abbia postato questa risposta nonostante la vecchia domanda, è la migliore finora – Spookbuster

+0

Cheers per il feedback e l'upvote. – fubar

0

5000 non sembra così intenso per un moderno motore JavaScript. Naturalmente dipende da quello che fai anche su ogni iterazione. Per chiarezza mi consiglia di utilizzare eol.split e [].forEach

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