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

2020/10/27 18:22 · javascript ·  · 0评论

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

您有以下三种可能性:

  1. 正则表达式

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

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

     str.includes('word')
    

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

性能测试-干草堆短
性能测试-干草堆长



** 2011年更新:**

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

您必须看到并尝试自我。这取决于您的需求。例如,不区分大小写的搜索使用正则表达式会更快。


更新2018:

为了使人们免于自己运行测试,以下是大多数常见浏览器的当前结果,这些百分比表示性能比第二快的结果有所提高(在不同的浏览器中有所不同):

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

Firefox:缓存RegExp(快18%)

IE11:缓存RegExp(快10%)

Edge: indexOf(快18%)

Safari:缓存RegExp(快0.4%)

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

The Fastest

  1. (ES6) includes
    var string = "hello",
    substring = "lo";
    string.includes(substring);
  1. ES5 and older indexOf
    var string = "hello",
    substring = "lo";
    string.indexOf(substring) !== -1;

http://jsben.ch/9cwLJ

在此处输入图片说明

Does this work for you?

string1.indexOf(string2) >= 0

Edit: This may not be faster than a RegExp if the string2 contains repeated patterns. On some browsers, indexOf may be much slower than RegExp. See comments.

编辑2:当字符串很长和/或包含重复模式时,RegExp可能比indexOf快。查看评论和@Felix的答案。

在ES6中,该includes()方法用于确定是否可以在返回truefalse适当的情况下在另一个字符串中找到一个字符串

var str = 'To be, or not to be, that is the question.';

console.log(str.includes('To be'));       // true
console.log(str.includes('question'));    // true
console.log(str.includes('nonexistent')); // false

这是jsperf之间

var ret = str.includes('one');

var ret = (str.indexOf('one') !== -1);

结果显示在jsperf中,它们似乎都表现良好。

我发现使用简单的for循环,遍历字符串中的所有元素,并使用charAt进行比较indexOf更快Regex该代码和证明可从JSPerf获得

ETA:根据jsperf.com上列出的Browser Scope数据indexOfcharAt两者在Chrome Mobile上的执行效果都相似。

为了找到一个简单的字符串,使用indexOf()方法和使用正则表达式几乎是相同的:http : //jsperf.com/substring-因此,请选择看起来更容易编写的字符串

这是使用.match()method进行字符串转换的简单方法

var re = /(AND|OR|MAYBE)/;
var str = "IT'S MAYBE BETTER WAY TO USE .MATCH() METHOD TO STRING";
console.log('Do we found something?', Boolean(str.match(re)));

先生,祝你愉快!

我为您制作了一个jsben.ch http://jsben.ch/#/aWxtF ...似乎indexOf有点快。

本文地址:http://javascript.askforanswer.com/jianchazifuchuandezuikuaifangfashizaijavascriptzhongbaohanlingyigezizifuchuan.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!