我正在处理 JavaScript 的性能问题。所以我只想问:检查一个字符串是否包含另一个子字符串的最快方法是什么(我只需要 bool 值)?您能否提出您的想法和示例代码段?
最佳答案
你有三种可能:
-
(new RegExp('word')).test(str) // or /word/.test(str)
indexOf
:str.indexOf('word') !== -1
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/