admin管理员组文章数量:1386760
Something like indexOf, except I need to find all indexes. If there's .indexOf and ,lastIndexOf , shouldn't there be a function to get all index occurences? I couldn't find.
Note that the string is very large, about 1MB in size, so I would need the fastest solution.
To clarify, I need to get all positions of where a substring occurs in a string.
E.g.
var str = "foo bar foo bar"; //the real string is 1MB
var indexes = str.indexOfAll('foo'); //the function I need
console.log(indexes); //should print [0,8];
One thing that es to mind is to use indexOf in a recurring loop, finds the first word, cut the string at the index, then use indexOf again and so on until it finds nothing. I'm not sure about performance (cutting and re-creating large strings).
Something like indexOf, except I need to find all indexes. If there's .indexOf and ,lastIndexOf , shouldn't there be a function to get all index occurences? I couldn't find.
Note that the string is very large, about 1MB in size, so I would need the fastest solution.
To clarify, I need to get all positions of where a substring occurs in a string.
E.g.
var str = "foo bar foo bar"; //the real string is 1MB
var indexes = str.indexOfAll('foo'); //the function I need
console.log(indexes); //should print [0,8];
One thing that es to mind is to use indexOf in a recurring loop, finds the first word, cut the string at the index, then use indexOf again and so on until it finds nothing. I'm not sure about performance (cutting and re-creating large strings).
Share Improve this question edited Jun 4, 2019 at 14:52 Maciej Kravchyk asked Jun 4, 2019 at 14:49 Maciej KravchykMaciej Kravchyk 16.8k7 gold badges71 silver badges81 bronze badges 11-
indexOf
within loop – hindmost Commented Jun 4, 2019 at 14:51 - Yeah I just thought about that edited my answer. But is there something more optimal? – Maciej Kravchyk Commented Jun 4, 2019 at 14:52
- I would disagree about this duplicate. It is about searching for a string in an array, but this question is about searching for a string pattern, which can be achieved using string-search algorithms like Knuth-Morris-Pratt or Boyer-Moore. – Yeldar Kurmangaliyev Commented Jun 4, 2019 at 14:55
-
is there something more optimal? IMO loop with
indexOf
is most optimal. It doesn't cut/re-create strings. Furthermore, it doesn't make redundant iterations if one uses 2nd parameter ofindexOf
– hindmost Commented Jun 4, 2019 at 14:58 - I'm going to try it and see how much it takes. I didn't know you can use indexOf in a loop just like that. If it takes a lot of time I'm going to try that string search algo. Thanks! – Maciej Kravchyk Commented Jun 4, 2019 at 15:01
2 Answers
Reset to default 5Easy solution:
const str = "...";
const searchKeyword = "...";
const startingIndices = [];
let indexOccurence = str.indexOf(searchKeyword, 0);
while(indexOccurence >= 0) {
startingIndices.push(indexOccurence);
indexOccurence = str.indexOf(searchKeyword, indexOccurence + 1);
}
If you need something highly performant, you may look over specific text search/indexing algorithms like Aho–Corasick algorithm or Boyer–Moore string-search algorithm.
Really depends on your use case and if the text you're searching into is changing or is static and can be indexed beforehand for maximum performance.
const IndexString = (str1, str2, output=[]) =>{
for(let i = 0; i < str1.length -1; i++){
let arr = [];
for(let j = i; j < (i+str2.length) & i<str1.length; j++) arr.push(str1[j])
const findnew = arr.join('');
if(findnew===str2) output.push(i);
}
return output
}
console.log(IndexString("tiktok tok tok tik tok tik", "tik"))
本文标签: javascriptGet all occurrences of a substring in a very big stringStack Overflow
版权声明:本文标题:javascript - Get all occurrences of a substring in a very big string - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744574246a2613527.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论