在 JavaScript 中检查字符串是否包含另一个子字符串的最快方法?

新手上路,请多包涵

我正在处理 JavaScript 的性能问题。所以我只想问:检查一个字符串是否包含另一个子字符串的最快方法是什么(我只需要布尔值)?您能否提出您的想法和示例代码段?

原文由 Đinh Hồng Châu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

你有三种可能:

  1. 正则表达式
 (new RegExp('word')).test(str)
 // or
 /word/.test(str)

  1. indexOf
 str.indexOf('word') !== -1

  1. includes
 str.includes('word')

正则表达式似乎更快(至少在 Chrome 10 中)。

性能测试——草垛

性能测试 - 大海捞针


**2011 年更新:**

不能肯定地说哪种方法更快。浏览器之间的差异是巨大的。虽然在 Chrome 10 中 indexOf 似乎更快,但在 Safari 5 中, indexOf 显然比任何其他方法都慢。

你必须自己去看看并尝试。这取决于您的需求。例如 ,不区分大小写的 搜索使用正则表达式要快得多。


2018 年更新:

只是为了避免人们自己运行测试,以下是大多数常见浏览器的当前结果,百分比表示性能比下一个最快的结果(浏览器之间有所不同)有所提高:

Chrome: indexOf(快约 98%) <-- wow

Firefox: 缓存的 RegExp(快约 18%)

IE11: 缓存的正则表达式(快约 10%)

边缘: indexOf(快约 18%)

Safari: 缓存的 RegExp(快约 0.4%)

请注意, 缓存的 RegExp 是: var r = new RegExp('simple'); var c = r.test(str); 相对于: /simple/.test(str)

原文由 Felix Kling 发布,翻译遵循 CC BY-SA 4.0 许可协议

最快的

  1. (ES6) 包括
    var string = "你好",
    子串 = "lo";
    string.includes(substring);

  1. ES5 和更早的 indexOf
    var string = "你好",
    子串 = "lo";
    string.indexOf(substring) !== -1;

http://jsben.ch/9cwLJ

在此处输入图像描述

原文由 Tính Ngô Quang 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题