Javascript 获取一个非常大的字符串中出现的所有子字符串

Javascript 获取一个非常大的字符串中出现的所有子字符串,javascript,Javascript,类似于indexOf,只是我需要找到所有的索引。如果有.indexOf和,lastIndexOf,那么是否应该有一个函数来获取所有索引出现?我找不到 请注意,字符串非常大,大小约为1MB,因此我需要最快的解决方案 为了澄清这一点,我需要得到子字符串在字符串中出现的所有位置 例如 我想到的一件事是在循环中使用indexOf,找到第一个单词,在索引处剪切字符串,然后再次使用indexOf,依此类推,直到什么也找不到。我不确定性能(剪切和重新创建大字符串)。简易解决方案: var str = "...

类似于indexOf,只是我需要找到所有的索引。如果有.indexOf和,lastIndexOf,那么是否应该有一个函数来获取所有索引出现?我找不到

请注意,字符串非常大,大小约为1MB,因此我需要最快的解决方案

为了澄清这一点,我需要得到子字符串在字符串中出现的所有位置

例如

我想到的一件事是在循环中使用indexOf,找到第一个单词,在索引处剪切字符串,然后再次使用indexOf,依此类推,直到什么也找不到。我不确定性能(剪切和重新创建大字符串)。

简易解决方案:

var str = "...";
var searchKeyword = "...";

var startingIndices = [];

var indexOccurence = str.indexOf(searchKeyword, 0);

while(indexOccurence >= 0) {
    startingIndices.push(indexOccurence);

    indexOccurence = str.indexOf(searchKeyword, indexOccurence + 1);
}
如果您需要高性能的东西,您可以查看特定的文本搜索/索引算法,如或

这取决于您的使用情况,以及您搜索的文本是否正在更改或是静态的,并且可以提前编制索引以获得最佳性能。

简易解决方案:

var str = "...";
var searchKeyword = "...";

var startingIndices = [];

var indexOccurence = str.indexOf(searchKeyword, 0);

while(indexOccurence >= 0) {
    startingIndices.push(indexOccurence);

    indexOccurence = str.indexOf(searchKeyword, indexOccurence + 1);
}
如果您需要高性能的东西,您可以查看特定的文本搜索/索引算法,如或


这取决于您的使用情况,以及您搜索的文本是否正在更改或是静态的,并且可以提前编制索引以获得最佳性能。

indexOf
在loopYeah中,我刚刚考虑过编辑我的答案。但是有什么比这更好的吗?我不同意这种重复。这是关于在数组中搜索字符串的问题,但这个问题是关于搜索字符串模式的问题,这可以通过使用诸如Knuth-Morris-Pratt或Boyer-Moore之类的字符串搜索算法来实现?带有
索引的IMO循环是最理想的。它不会剪切/重新创建字符串。此外,如果使用
indexOf
的第二个参数,它不会产生多余的迭代,我将尝试一下,看看需要多少。我不知道你可以像那样在循环中使用indexOf。如果这需要很多时间,我将尝试字符串搜索算法。谢谢
indexOf
是的,我只是想编辑我的答案。但是有什么比这更好的吗?我不同意这种重复。这是关于在数组中搜索字符串的问题,但这个问题是关于搜索字符串模式的问题,这可以通过使用诸如Knuth-Morris-Pratt或Boyer-Moore之类的字符串搜索算法来实现?带有
索引的IMO循环是最理想的。它不会剪切/重新创建字符串。此外,如果使用
indexOf
的第二个参数,它不会产生多余的迭代,我将尝试一下,看看需要多少。我不知道你可以像那样在循环中使用indexOf。如果这需要很多时间,我将尝试字符串搜索算法。谢谢它工作正常,1毫秒。谢谢我不知道indexOf有一个额外的参数。它工作正常,1ms。谢谢我不知道indexOf还有一个额外的参数。