希望我不會複製現有問題,但我無法在此處找到任何有此問題的人。我需要通過一個帶有幾個eol字符的大字符串循環,並閱讀每一行尋找字符。我可以做到以下幾點,但我覺得它效率不高,因爲在這個大字符串中可能有超過5000個字符。Javascript以字符行尾字符串分隔字符串並讀取每行
var str = largeString.split("\n");
,然後遍歷str作爲數組
我真的不能使用jQuery和只能使用簡單的JavaScript。
有沒有其他有效的方法來做到這一點?
希望我不會複製現有問題,但我無法在此處找到任何有此問題的人。我需要通過一個帶有幾個eol字符的大字符串循環,並閱讀每一行尋找字符。我可以做到以下幾點,但我覺得它效率不高,因爲在這個大字符串中可能有超過5000個字符。Javascript以字符行尾字符串分隔字符串並讀取每行
var str = largeString.split("\n");
,然後遍歷str作爲數組
我真的不能使用jQuery和只能使用簡單的JavaScript。
有沒有其他有效的方法來做到這一點?
所以,你知道該怎麼做,你只是確保沒有更好的方法來做到這一點?那麼,我不得不說,你提到的方式就是這樣。儘管如果你正在尋找由特定字符拆分的某些文本,你可能想要查找正則表達式匹配。一個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 ')方法可能是最好的。
您可以手動讀取字符,並在換行時調用處理函數。 CPU使用率不太可能更高效,但可能會佔用更少的內存。但是,只要字符串少於幾MB,就沒有關係。
您總是可以使用indexOf
和substring
來獲取字符串的每一行。
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
作爲一個在2017年有同樣問題的人,我很高興你發佈了這個答案,儘管老問題,這是迄今爲止最好的一個 – Spookbuster
爲反饋和upvote歡呼。 – fubar
5000對於現代JavaScript引擎來說似乎並不那麼激烈。當然,這取決於你在每次迭代時做了什麼。爲了清楚起見,我建議使用eol.split
和[].forEach
const eol = require('eol')
let lines = eol.split(text)
lines.forEach(function(line) {
// ...
})
嗯......你可以使用網絡工作者,你可以在後臺解析字符串。 http://www.w3schools.com/html/html5_webworkers.asp – Hellgorithm
使用正則表達式怎麼樣? – l2mt
這應該工作得很好 - 沒有明顯的方法來簡化它。現代電腦甚至智能手機都只有5000個字符。你有證據表明這太慢了嗎? – jfriend00