2011-02-28 84 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