在字符串中搜索子字符串,是最基本的操作之一,我们经常会遇到,我通常做的是,查看代码中的其他地方,看看其他人都做了什么,然后做同样的事情!现在,我只是想提出一些最常用的选项,以及它们之间的性能比较,以防您关心性能,以便当涉及到将来的选择时,您知道哪一个是更好的选择!
代码展示
下面是我在搜索字符串时经常看到的6种不同的方法:
// 1. includes (introduced in ES6)
var string = "string to search for substring",
substring = "sea";
string.includes(substring);
// 2. RegExp: test
var string = "string to search for substring",
expr = /sea/; // no quotes here
expr.test(string);
//3. string.search
var string = "string to search for substring",
expr = "/sea/";
string.search(expr);
//4. lodash: includes
var string = "string to search for substring",
substring = "sea";
_.includes(string, substring);
// 5. string.match
var string = "string to search for substring",
expr = "/sea/";
string.match(expr);
// 3. string.indexOf
var string = "string to search for substring",
substring = "sea";
string.indexOf(substring) !== -1;
性能基准测试
- 如果你想知道,给出一个一般长度的字符串,哪个会表现得更好,regex.test是最快的,其次是string.search(libraries by ES6),第三位属于string.indexof方法:
- 如果放大测试字符串的规模会怎么样?
我缩放这个字符串,把它放大1000倍(100万字符,甚至1000万字符),我看到string.indexof是一个赢家,虽然不是很多!
下面这是我的基准测试的结果,我创建了1~1000万个字符的字符串来进行测试
基准测试非常大的字符串,并重复子字符串1000次:
前往测试页面 →
译者注:这个链接提供的测试内容感觉跟作者描述的测试内容不符,可能链接是错的
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。