2013-11-04 13 views
5

Hy vọng rằng tôi không sao chép câu hỏi hiện có nhưng tôi thực sự không thể tìm thấy bất kỳ ai có câu hỏi này tại đây. Tôi có một nhu cầu để lặp qua một chuỗi lớn với một số nhân vật eol và đọc từng dòng này tìm kiếm các ký tự. Tôi canve thực hiện như sau nhưng tôi cảm thấy rằng nó không phải là rất hiệu quả vì có thể có hơn 5000 ký tự trong chuỗi lớn này.Javascript để tách chuỗi bằng ký tự cuối dòng và đọc từng dòng

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

và sau đó lặp qua str như một mảng

tôi không thể thực sự sử dụng jquery và chỉ có thể sử dụng javascript đơn giản.

Có cách nào khác hiệu quả để thực hiện việc này không?

+0

hmmm ... bạn có thể sử dụng nhân viên web, bạn có thể phân tích chuỗi trong nền. http://www.w3schools.com/html/html5_webworkers.asp – Hellgorithm

+0

điều gì về việc sử dụng cụm từ thông dụng? – l2mt

+5

Điều này sẽ hoạt động tốt - không có cách nào rõ ràng để làm điều đó đơn giản hơn. 5000 ký tự là không có gì cho một máy tính hiện đại, ngay cả một điện thoại thông minh. Bạn có một số bằng chứng rằng điều này là quá chậm? – jfriend00

Trả lời

-1

Vì vậy, bạn biết cách thực hiện điều đó, bạn chỉ đảm bảo không có cách nào tốt hơn để làm điều đó? Vâng, tôi phải nói cách bạn đã đề cập là chính xác nó. Mặc dù bạn có thể muốn tìm kiếm một trận đấu regex nếu bạn đang tìm kiếm một số văn bản nhất định bởi các ký tự nhất định. Một JS Regex tham khảo có thể được tìm thấy Here

Đây sẽ là hữu ích nếu bạn biết làm thế nào các văn bản sẽ được thiết lập, một cái gì đó giống như

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 
} 

Nếu không, có, large_str.split ('\ n ') phương pháp với một vòng lặp có lẽ là tốt nhất.

+0

Một regex rất khó có thể nhanh hơn '.split()'. Ngoài ra, tôi không nghĩ rằng điều này sẽ làm việc vì '\ s' bao gồm' \ n' làm điều đó sẽ không phá vỡ ranh giới dòng. – jfriend00

+0

Xem xét tôi không biết làm thế nào anh ta sẽ tìm kiếm nó, tôi đã cho anh ta những gì tôi có thể. Nếu tôi biết nhiều hơn, tôi có thể giúp nhiều hơn. Tôi cho rằng anh ta có thể '.split()' một cái gì đó và sau đó sử dụng một regex cho mỗi chuỗi để tìm bất cứ điều gì anh ta muốn. – Jhecht

0

Bạn có thể đọc ký tự đó theo ký tự theo cách thủ công và gọi trình xử lý khi bạn nhận được dòng mới. Nó không có khả năng hiệu quả hơn trong việc sử dụng CPU nhưng có khả năng sẽ chiếm ít bộ nhớ hơn. Tuy nhiên, miễn là chuỗi ít hơn một vài MB, nó không quan trọng.

2

Bạn luôn có thể sử dụng indexOfsubstring để lấy từng dòng của chuỗi.

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

Sửa Tôi không thấy câu hỏi này rất cũ trước khi trả lời. #fail

+0

Là người có cùng câu hỏi trong năm 2017, tôi rất vui vì bạn đã đăng câu trả lời này bất chấp câu hỏi cũ, đây là câu hỏi hay nhất cho đến nay – Spookbuster

+0

Chúc mừng phản hồi và ý kiến ​​nổi bật. – fubar

0

5000 dường như không mãnh liệt đối với một công cụ JavaScript hiện đại. Tất nhiên nó phụ thuộc vào những gì bạn làm trên mỗi lần lặp lại quá. Để rõ ràng, tôi khuyên bạn nên sử dụng eol.split[].forEach

const eol = require('eol') 
let lines = eol.split(text) 
lines.forEach(function(line) { 
    // ... 
}) 
Các vấn đề liên quan