查找启动字符串的选项卡数量的最佳/最快方法是什么?

时间:2011-09-14 17:33:46

标签: javascript regex optimization

我想在字符串的开头找到制表符的数量(当然我希望它是快速运行的代码;))。这是我的想法,但不确定这是否是最佳/最快的选择:

//The regular expression
var findBegTabs = /(^\t+)/g;

//This string has 3 tabs and 2 spaces: "<tab><tab><space>something<space><tab>"
var str = "      something  ";

//Look for the tabs at the beginning
var match = reg.exec( str );

//We found...
var numOfTabs = ( match ) ? match[ 0 ].length : 0;

另一种可能性是使用循环和charAt:

//This string has 3 tabs and 2 spaces: "<tab><tab><space>something<space><tab>"
var str = "      something  ";

var numOfTabs = 0;
var start = 0;

//Loop and count number of tabs at beg
while ( str.charAt( start++ ) == "\t" ) numOfTabs++;

3 个答案:

答案 0 :(得分:4)

general 中如果你可以通过简单地遍历字符串并在每个索引处进行字符检查来计算数据,这将比正构建更复杂的搜索引擎的正则表达式更快。我鼓励你对此进行分析,但我认为你会发现直接搜索速度更快。

注意:您的搜索应该使用===而不是==,因为您不需要在等式检查中引入转化

function numberOfTabs(text) {
  var count = 0;
  var index = 0;
  while (text.charAt(index++) === "\t") {
    count++;
  }
  return count;
}

答案 1 :(得分:2)

尝试使用profiler(例如jsPerf或其中一个many available backend profilers)在目标系统(您计划支持的浏览器和/或解释程序)上创建和运行基准测试你的软件)。

根据您的预期数据和目标系统推断哪种解决方案的性能最佳是有用的;但是,有时您可能会对哪种解决方案实际上执行速度最快感到惊讶,特别是在大分析和典型数据集方面。

在您的特定情况下,迭代字符串中的字符可能比正则表达式操作更快。

答案 2 :(得分:0)

单线(如果你发现最小的是最好的):

"\t\tsomething".split(/[^\t]/)[0].length;

即。按所有非制表符分割,然后获取第一个元素并获取其长度。