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

标签 javascript regex substring

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

最佳答案

你有三种可能:

  1. Regular expression :

     (new RegExp('word')).test(str)
     // or
     /word/.test(str)
    
  2. indexOf :

     str.indexOf('word') !== -1
    
  3. includes :

     str.includes('word')
    

<删除> Regular expressions seem to be faster (至少在 Chrome 10 中)。

Performance test - short haystack
Performance test - long haystack


**2011 年更新:**

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

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


2018 年更新:

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

Chrome: indexOf(快约 98%)<-- wow
Firefox:缓存正则表达式(快约 18%)
IE11:缓存正则表达式(快~​​10%)
Edge: indexOf(快约 18%)
Safari:缓存RegExp(快~0.4%)

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

关于javascript - 在 JavaScript 中检查字符串是否包含另一个子字符串的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5296268/

相关文章:

python - 使用 python 从网站中仅提取 'strong' 标题后的要点

java - 如何拆分没有特殊字符的解析字符串数据?

javascript - 如何通过自动填充表格来获取以年、月和日为单位的年龄?

javascript - IE7 有哪些 window.postMessage 模拟选项?

javascript - 动态符号检索错误: Win32 error 127 - even when importing self process

javascript - 通过 Javascript 压缩重复使用的 HTML(基于变量的变化)

c# - 从 Div 标签中提取内容 C# RegEx

regex - 查找文件夹中编号最大的文件名

java - 如何循环遍历数组并从 ArrayList 创建子字符串?

php - 如何从数组中获取所有最接近的匹配字符串?