【问题标题】:Javascript Partial SearchJavascript 部分搜索
【发布时间】:2011-07-05 22:20:59
【问题描述】:

基本上我有一个数组,我需要对其执行部分文本搜索(所有元素都是英文字符串)。该数组可以有大约 1000 个元素,我需要能够(有效地)搜索每个元素中的字符串。

我唯一的选择是对 .match() 运行每个字符串的数组的完整循环吗?或者会有更好的选择吗?

我的一个想法是将 1000 个元素的数组拆分为大约 100 个的块,然后 .join.match() 那个部分。这样,如果找到了一个元素,我们可以查看它,如果没有,我们可以移动到下一个块。显然,块大小需要稍微调整一下,但这会提供一个可行的解决方案吗?

【问题讨论】:

  • 将 array.join 和 while(match = RE.exec(...)) {} 与全局正则表达式一起使用。您可以使用 RE.lastIndex 在 while 循环的每次迭代中查找匹配的项目
  • 你真的需要正则表达式吗?这是什么类型的文本?源代码?英文文本?

标签: javascript algorithm search


【解决方案1】:

您可以尝试使用inverted indexHere's a nice implementation in Javascript,非常符合 Lucene 风格。虽然我不知道仅 1000 个元素是否值得,但我想这也取决于每个元素的长度。

【讨论】:

  • 每个元素都很短,每个元素大概有 50 个字符。同样,如果我将元素分解为单独的部分而不是将它们保留为一个庞大的列表,我也许可以在实施搜索算法之前进一步加快搜索速度,但这看起来很有趣,谢谢!
【解决方案2】:

这个是为你做的吗?

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

【讨论】:

  • 不完全是@mplungjan。搜索字符串并不是我遇到的问题,我遇到的问题更多的是方法问题而不是代码问题。
猜你喜欢
  • 1970-01-01
  • 2021-04-23
  • 2015-02-07
  • 1970-01-01
  • 2011-01-20
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多