2013-11-04 109 views
5

希望我不會複製現有問題,但我無法在此處找到任何有此問題的人。我需要通過一個帶有幾個eol字符的大字符串循環,並閱讀每一行尋找字符。我可以做到以下幾點,但我覺得它效率不高,因爲在這個大字符串中可能有超過5000個字符。Javascript以字符行尾字符串分隔字符串並讀取每行

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

,然後遍歷str作爲數組

我真的不能使用jQuery和只能使用簡單的JavaScript。

有沒有其他有效的方法來做到這一點?

+0

嗯......你可以使用網絡工作者,你可以在後臺解析字符串。 http://www.w3schools.com/html/html5_webworkers.asp – Hellgorithm

+0

使用正則表達式怎麼樣? – l2mt

+5

這應該工作得很好 - 沒有明顯的方法來簡化它。現代電腦甚至智能手機都只有5000個字符。你有證據表明這太慢了嗎? – jfriend00

回答

-1

所以,你知道該怎麼做,你只是確保沒有更好的方法來做到這一點?那麼,我不得不說,你提到的方式就是這樣。儘管如果你正在尋找由特定字符拆分的某些文本,你可能想要查找正則表達式匹配。一個JS正則表達式參考,可以發現Here

,如果你知道該文本將如何進行設置這將是有益的,一個類似於

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 ')方法可能是最好的。

+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

爲反饋和upvote歡呼。 – fubar

0

5000對於現代JavaScript引擎來說似乎並不那麼激烈。當然,這取決於你在每次迭代時做了什麼。爲了清楚起見,我建議使用eol.split[].forEach

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