2011-02-28 81 views
0

本質上,我有一個數組,我需要執行部分文本搜索(所有元素都是英文字符串)。該數組可以有大約1000個元素,我需要能夠在每個元素中搜索(高效)字符串。Javascript部分搜索

是我唯一的選擇通過數組運行每個字符串對.match()的完整循環?或者會有更好的選擇嗎?

我想到的一個想法是將1000元素的數組分割成大約100塊,然後是.join.match()那部分。這樣,如果找到了一個元素,我們可以查看它,如果不是,我們可以移動到下一個塊。顯然,塊大小需要稍微調整一下,但這是否會提供一個可行的解決方案?

+0

使用array.join和while(match = RE.exec(...)){}與全球正則表達式。您可以使用RE.lastIndex在while循環的每次迭代中查找您匹配的項目 – Raynos 2011-02-28 17:15:06

+0

您是否確實需要正則表達式?這是什麼類型的文本?源代碼?英文文本? – 2011-02-28 17:18:05

+0

這是直的英文文本。 – 2011-02-28 17:19:32

回答

3

您可以嘗試使用inverted indexHere's a nice implementation in Javascript,非常符合Lucene風格。雖然我不知道它是否值得只有1000個元素,但我想這也取決於每個元素有多長。

+0

每個元素都相當短,每個元素大概有50個字符。同樣,如果我將元素分解成單獨的部分,而不是將它們保持爲一個巨大的列表,我可能會在實現搜索算法之前加快搜索速度,但這看起來很有趣,謝謝! – 2011-02-28 18:02:15

0

這是爲您做的嗎?

<script> 
var str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut erat vitae nulla dignissim sodales. Duis mattis, massa ac adipiscing lacinia, massa velit suscipit turpis, ut eleifend risus nisl sed dui. Suspendisse vitae malesuada purus. Vestibulum at pharetra justo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi sit amet risus augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed luctus, tellus vehicula sollicitudin tempus, quam dolor scelerisque dolor, ac blandit libero nisi quis metus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer id elit nunc. Quisque tincidunt tempor ipsum, quis porta metus mollis at. Aenean id sem sit amet est vestibulum feugiat. \ 
Duis rutrum, ligula id dapibus molestie, velit tellus interdum erat, id fringilla mi metus vel neque. Pellentesque dolor arcu, imperdiet vel sodales vitae, egestas ut ligula. Curabitur sapien erat, congue a lacinia sed, accumsan id ipsum. Praesent sit amet tellus neque, id placerat lacus. Etiam nec tortor tortor, nec facilisis nulla. Aenean dui metus, rutrum a fringilla eget, porta ut nisi. Vestibulum volutpat tempor nibh, nec porta risus molestie eu. In metus ipsum, ultricies at posuere ac, tristique sit amet lorem. Sed et quam augue. Aenean eget vestibulum erat. Sed neque orci, luctus a sollicitudin at, rhoncus nec neque. Sed blandit, metus non pharetra semper, nulla ante suscipit orci, nec ultricies erat ipsum vel risus. Pellentesque a neque est."; 
var partial = "sed" 
var regExp = new RegExp("("+partial+")","gi"); 
document.write(str.replace(regExp,'<span style="color:red">$1</span>')); 
</script> 
+0

不完全@mplungjan。搜索一個字符串並不是我遇到的問題,在這裏我有一個問題比代碼更像一個方法問題。 – 2011-02-28 17:54:52